본문 바로가기

HTML

Javascript(5) - innerHTML 과 innerText 차이점/DOM /id속성으로 요소를 선택/태그 이름으로 선택/클래스속성으로 선택/css 선택자를 활용하여 선택/요소 속성 변경/속성값 바꾸기/브라우저 객체 모델/(Brow..

innerHTML 과 innerText 차이점

버튼을 눌렀을 때 div 영역에 내용을 출력하는데 사용하는 프로퍼티 innerHTML, innerText

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<button id="btn">눌러요</button>
<div id="div1"></div>

<script type="text/javascript">
	var d = document.getElementById('div1');
	var btn = document.getElementById('btn');
	
	btn.addEventListener('click', function(){
		d.innerHTML = '<h1>HELLO~~</h1>'
		//d.innerText = '<h1>안녕~~</h1>'
	});
</script>
</body>
</html>

태그를 문자열에 입력하면 태그로 인식해서 태그에 맞게 출력됨

태그를 입력해주어도 문자열 그대로 받아드려서 문자열 그대로 출력됨

 

 

 

 

DOM 요소 선택자

HTML 문서의 요소(들) 선택을 위해 사용

선택 방식

 

  1. id속성으로 요소를 선택 - getElementById('id')
  2. 태그 이름으로 선택 - getElementsByTagName('div')
  3. 클래스속성으로 선택 - getElementsByClassName('class')
  4. css 선택자를 활용하여 선택 - querySelector('.class') 
  • 단점 : 같은 클래스를 갖는 요소를 선택할 경우
    getElementsByClassName은 모든 요소를 선택하지만, 
    querySlector는 해당 요소들 중 첫번째 요소만 선택 

다수의 요소를 선택하는 경우 선택 결과는 배열로 저장
단일 요소(id로 선택)의 경우는 하나의 변수로 저장

 

 

1. 태그 종류 / 클래스명 / id명 으로 검색하여 각자 스타일 적용됨

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Element Finder</title>
</head>
<body>
<h1>h1 tag1</h1>
<h1>h1 tag2</h1>
<h1>h1 tag3</h1>
<h1>h1 tag4</h1>
<h2 class="head2">h2 class</h2>
<h2 class="head2">h2 class</h2>
<h2 class="head2">h2 class</h2>
<h2 class="head2">h2 class</h2>
<h3 id="head3">h3 id</h3>
</body>
<script type="text/javascript">
	//태그 종류로 검색
	var elemTag = document.getElementsByTagName('h1');
	console.log(elemTag);//다수의 요소를 선택하는 경우 선택 결과는 배열로 저장
	elemTag[0].style.backgroundColor = 'red';//배열에 저장되었으니까 배열 번호를 선택해서 스타일 따로 적용시킬 수 있음. '-'대신 대문자로 스타일 적어주면됨
	elemTag[0].style.color = 'white';
	elemTag[1].style.backgroundColor = 'yellow';
	
	//클래스명으로 검색
	var elemClass = document.getElementsByClassName('head2');//지정 클래스에 해당하는 다수의 요소를 선택하는 경우 선택 결과는 배열로 저장
	console.log(elemClass);
	var i;
	for (i = 0; i < elemClass.length; i++) {
		if (i % 2 == 0) {
			elemClass[i].style.backgroundColor = 'olive';
		}
	}
	
	//id명으로 검색
	var elemId = document.getElementById('head3');
	console.log(elemId);
	elemId.style.backgroundColor = 'blue';
	elemId.style.color = '#f4f4f4';
</script>
</html>

 

 

2. css 선택자를 활용하여 선택

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h2>Element Control</h2>
<h3>쿼리 셀렉터는 css의 셀렉터를 차용한 것입니다.</h3>
<p class="ex">하지만 복수개의 엘리먼트는 수용하지 못합니다.</p>
<span id="sample"></span><br>
<a href="http://www.naver.com" target="_blank">네이버</a>
<div>
	<p>특정 요소의 자식 요소를 선택할 수도 있습니다.
</div>
<button>p 태그</button>
<button>p의 ex클래스</button>
<button>아이디</button>
<br>
<button>자식요소</button>
<button>속성</button>
</body>
<script type="text/javascript">
//	var btn = document.getElementsByTagName('button');//버튼이 순서대로 배열에 저장됨 -> 0~4번
	var btn = document.querySelectorAll('button');
	
	btn[0].addEventListener('click', function(){
		document.querySelector('p').style.backgroundColor='red';
	});
	
	btn[1].addEventListener('click', function(){
		document.querySelector('.ex').style.backgroundColor='green';
	});
	
	btn[2].addEventListener('click', function(){
		document.querySelector('#sample').innerHTML='그래서 하나의 아이디나 첫번째 요소를' + ' 지목할 때 유용합니다.';
	});

	btn[3].addEventListener('click', function(){
		document.querySelector('div p').style.backgroundColor='gray';
	});

	btn[4].addEventListener('click', function(){
		document.querySelector('a[target="_blank"]').style.border='10px solid red';
	});
</script>
</html>

 

.querySelectorAll()은 특정 CSS 선택자를 가진 모든 요소를 배열로 가져오는 메서드(같은 류의 모든 요소를 배열로 저장)

초기 화면

 

p태그 찾기

 

c클래스명 찾기

 

id 찾기

 

자식 요소 찾기

 

속성 찾기

 

 

 



요소 속성 변경

  1. 속성 값 직접 변경
       요소.속성 = 값;
  2. setAttribute 함수 활용
       요소.setAttribute('속성', '값');

 

속성값 바꾸기

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>요소 속성 변경</title>
</head>
<body>
<img id="image" src="images/dotori.jpg" title="도토리1"><br>
<button id="btnimg">변경</button>
<hr><!-- ---------------------------------------------- -->
<h3 id="head3">버튼을 누르면 글자색이 바뀝니다.</h3>
<button id="btnColor">색상변경</button>
<hr>
<h3>속성값 가져오기 예제</h3>
<input type="text" value="아무내용....">
<button id="btnt">눌러라</button>
</body>
<script type="text/javascript">
	//속성값 바꾸기
	var elem = document.getElementById('image');
	var btn = document.getElementById('btnimg');
	
	btn.addEventListener('click', function(){
		elem.setAttribute('src', 'images/dotori2.jpg');//(변경할 속성, 변경할 값)
		elem.setAttribute('title', '도토리2');
	});
</script>
</html>

 

초기화면

 

이미지 속성 및 타이틀 속성값 바뀜

 

 

버튼 누를시 글자색 바꾸기

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>요소 속성 변경</title>
</head>
<body>
<img id="image" src="images/dotori.jpg" title="도토리1"><br>
<button id="btnimg">변경</button>
<hr><!-- ---------------------------------------------- -->
<h3 id="head3">버튼을 누르면 글자색이 바뀝니다.</h3>
<button id="btnColor">색상변경</button>
<hr>
<h3>속성값 가져오기 예제</h3>
<input type="text" value="아무내용....">
<button id="btnt">눌러라</button>
</body>
<script type="text/javascript">
	//버튼 누를시 글자색 바꾸기
	var head = document.getElementById('head3');
	var btnc = document.getElementById('btnColor');
	var fcolor = ['red', 'green', 'blue', 'gray'];
	var i = -1;
	
	btnc.addEventListener('click', function(){
		i++;
		if (i == fcolor.length) {
			i = 0;//색상 변경이 순환되도록 처리
		}
		head.setAttribute('style', 'color: ' + fcolor[i] + ';');
	});
</script>
</html>

 

초기화면

 

버튼 클릭 후

 

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>요소 속성 변경</title>
</head>
<body>
<img id="image" src="images/dotori.jpg" title="도토리1"><br>
<button id="btnimg">변경</button>
<hr><!-- ---------------------------------------------- -->
<h3 id="head3">버튼을 누르면 글자색이 바뀝니다.</h3>
<button id="btnColor">색상변경</button>
<hr>
<h3>속성값 가져오기 예제</h3>
<input type="text" value="아무내용....">
<button id="btnt">눌러라</button>
</body>
<script type="text/javascript">
	//type변경
	var tags = document.getElementsByTagName('input');
	var btntag = document.getElementById('btnt');
	
	btntag.addEventListener('click', function(){
		var att = tags[0].type;//입력이 하나만 있어도 기본 형태가 배열이기때문에 배열로 불러와줘야함
		console.log(att);
		att = tags[0].value;
		console.log(att);
		
		var type = tags[0].getAttribute('type');
		if (type == 'text') {
			tags[0].type = 'button';
			tags[0].value = '클릭';
			tags[0].setAttribute('onclick', 'alert("Hi~~~")');
		}
		if (type == 'button') {
			tags[0].type = 'text';
			tags[0].value = '아무내용....';
			//속성 제거 : .removeAttribute('속성');
			tags[0].removeAttribute('onclick');//위에 onclick속성이 남아있어서 remove해줌!
		}
	});
</script>
</html>

tags[0].removeAttribute('onclick'); 을 해주는 이유

: 위에 onclick속성이 남아있어서 remove해줌! -> alert창 뜨지 않게 해줌!!

 

 

 

초기화면 - 텍스트란에 '새로운 내용' 입력

 

콘솔창에서 type과 value 출력

 

type이 text면 버튼으로 바꿔주고

type이 버튼이면 text으로 바꿔준다

 

클릭 누르면 경고창 뜸

 

눌러라 누르면 타입 바뀜

 

 

 

 


요소 속성 값 얻기

  1. 속성 값 직접 구하기
       변수 = 요소.속성;
  2. getAttribute 함수 활용
       변수 = 요소.getAttribute('속성');



실습 문제

입력 문자수 제한하기
  10글자 이상 입력을 제한하는 입력 형식을 작성하시오.
  
참고 사항. substring(시작번호, 끝번호)
  - 시작 번호부터 끝번호 전까지의 문자열을 추출
예) var str = '0123456789';
var str2 = str.substring(1, 8);
//str2 == '1234567'
문자열 길이 : str.length

  1 ~ 5자 이내 일 때는 글자색 - 검정색
  6 ~ 9자 이내 일때는 글자색 - 오렌지색
  10자 일 때는 글자색 - 빨간색
  

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>입력 제한 처리</title>
</head>
<body>
	입력한 값 : <span></span>
	<br>
	<input id="input" type="text" onkeyup="going()" placeholder="10자까지만 입력가능"><span id="span">(0자 입력)</span> 
	<h4 id="typing"></h4>
	

</body>
<script type="text/javascript">
	var input = document.getElementById('input');
	
	function going() {
		var msg = document.getElementById('input').value;
		var str = msg.substring(0, 10);
		
		var strcnt = str.length;

		if (strcnt <= 5) {
			input.style.color='black';
		}
		if (strcnt >= 6 && strcnt <= 9) {
			input.style.color='orange';
		}
		if (strcnt == 10) {
			input.style.color='red';
			alert("10자까지만 입력 가능합니다!")
		}
		
		document.getElementById('span').innerHTML= "(" + strcnt + "자 입력)";	
	}
	
</script>
</html>

 

초기화면

 

 1 ~ 5자 이내 일 때는 글자색 - 검정색 

 

6 ~ 9자 이내 일때는 글자색 - 오렌지색 

 

경고창

 

 10자 일 때는 글자색 - 빨간색 

 

 

 

 

 

 

 


브라우저 객체 모델(Browser Object Model, BOM)

BOM은 브라우저에서 제공하는 기능을 처리하는 javascript. 

 

  • 대화창(경고창-alert, 확인창-confirm, 입력창-prompt)   
  • 화면 크기 screen 관련 함수들.
  • 뒤로가기, 앞으로가기 관련 함수(페이지 전환 관련 변수)
  • 타이머 관련 함수.


1. 화면 크기(Screen) 관련

  screen - 모니터(화면) 크기, 작업표시줄 제외 크기
  window - 브라우저(창) 크기
  document.body.clientXXXXXX - 페이지의 크기

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>화면 크기 정보</title>
</head>
<body>
<p>내 모니터 크기 : <span id="scrSize"></span></p>
<p>내 모니터 크기(작업표시줄 제외) : <span id="avilSize"></span></p>
<p>브라우저 크기 : <span id="winSize"></span></p>
<p>페이지 크기 : <span id="pageSize"></span></p>
</body>
<script type="text/javascript">
	//모니터 크기 저장 변수
	var swidth = screen.width;
	var sheight = screen.height;
	//작업 표시줄 제외 모니터 크기 저장 변수
	var awidth = screen.availWidth;
	var aheight = screen.availHeight;
	//브라우저 크기 저장 변수
	var wwidth = window.innerWidth;
	var wheight = window.innerHeight;
	//페이지 크기 저장 변수
	var pwidth = document.body.clientWidth;
	var pheight = document.body.clientHeight;
	
	//각 span 요소에 대한 변수 방법1)
	var spansc = document.getElementById('scrSize');
	var spanav = document.getElementById('avilSize');
	var spanwn = document.getElementById('winSize');
	var spanpg = document.getElementById('pageSize');

	//각 span 요소에 대한 변수 방법2)
	//span을 배열로 묶어서 사용할 수도 있음
	//var spans = document.getElementByTagName('span');
	
	spansc.innerHTML = swidth + "X" + sheight;
	spanav.innerHTML = awidth + "X" + aheight;
	spanwn.innerHTML = wwidth + "X" + wheight;
	spanpg.innerHTML = pwidth + "X" + pheight;
	
</script>
</html>

 

 

 



타이머 기능 구현

  setTimeout : 지정된 시간 후 동작 후 종료
  setInterval : 지정된 시간 후 동작을 반복
  clearInterval : 반복적으로 동작하는 타이머 제거

  setTimeout(함수, 시간);
  setInterval(함수, 시간);
  -> 시간값은 밀리세컨드 단위(1/1000 초)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>타이머</title>
</head>
<body>
<button onclick="inter()">시작</button>
<button onclick="stop()">정지</button>
<button onclick="setTime()">경고창</button>
<h1 id="msg">0</h1>

</body>
<script type="text/javascript">
	var msg = document.getElementById('msg');
	
	var x = 0;//msg에 출력될 내용 저장 변수
	
	var myTime;//타이머
	
	function inter() {
		myTime = setInterval(function(){//타이머기능을 하는 함수(보통 편하게 익명함수 사용) 작성
			x++;//x는 시간의 역할이 아니라 그냥 하나씩 증가하는 변수이고 그걸 출력해줌 -> 단위시간만큼 msg가 출력되기때문에 단위시간에 따라 타이머 설정가능
			msg.innerHTML = x;//x를 증가시켜서 msg에 출력한다
		}, 1000);//1000 -> 시간값, 단위: 밀리세컨드(1/1000)
	}
	
	function stop() {
		clearInterval(myTime);
			
		/*	//정지 시 카운터 초기화할 경우
			x= 0;
			msg.innerHTML = x;
		*/
	}
	
	function setTime() {//버튼을 누른 시점에서 설정시간 이후에 경고창 알림 뜨게하기
		setTimeout(function() {
			alert('3초가 지났습니다.');
		}, 3000);
	}
</script>
</html>

 

설정 시간마다 숫자 증가함 (1초에 1씩)

 

경고창 누른 순간부터 3초 후에 경고창 뜸

 

 

 

 


페이지 전환 내장 객체 : location

  <a> 태그와 같은 성질을 가지는 객체.
  페이지의 주소 정보를 저장.
  href 프로퍼티에 값을 변경하면 페이지를 변경할 수 있음.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>시간차 페이지 이동</title>
</head>
<body>
<p>이동할 페이지 : 'http://www.google.com'</p>
<h1><span id="count">5</span>초 후 페이지가 이동됩니다.</h1>
</body>
<script type="text/javascript">
	var cnt = 5;
	var msg = document.getElementById('count');
	
	//화면에 카운트 다운을 보여주기 위한 타이머
	setInterval(function(){
		cnt--;
		msg.innerHTML = cnt;
	}, 1000);
	
	setTimeout(function() {
		alert("페이지가 이동됩니다.");
		location.href = "http://www.google.com";//a태그와 같은 역할을 하는 녀석
	}, 5000);
</script>
</html>

 

카운트다운 시작

 

페이지 이동 안내창 뜬 후 이동할 페이지로 페이지 이동됨

 

 

 

 

 

이동 제어 

  • 뒤로가기
  • 앞으로가기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>이동 제어</title>
</head>
<body>
<!-- 브라우저의 뒤로가기, 앞으로 가기 버튼 -->
<button>뒤로가기</button>
<button>앞으로가기</button>
</body>
<script type="text/javascript">
var btns = document.getElementsByTagName('button');

//btns[0] : 뒤로가기 버튼, btns[1]: 앞으로가기 버튼
btns[0].addEventListener('click', function(){
	window.history.back();
});

btns[1].addEventListener('click', function(){
	window.history.forward();
});
</script>
</html>