본문 바로가기

JavaScript

자바스크립트 문법 (9)

 

 

HTML 요소의 선택

document.getElementsByTagName(태그이름) 해당 태그 이름의 요소를 모두 선택함.
document.getElementById(아이디) 해당 아이디의 요소를 선택함.
document.getElementsByClassName(클래스이름) 해당 클래스에 속한 요소를 모두 선택함.
document.getElementsByName(name속성값) 해당 name 속성값을 가지는 요소를 모두 선택함.
document.querySelectorAll(선택자) 해당 선택자로 선택되는 요소를 모두 선택함.

 

 

HTML 요소의 생성

document.createElement(HTML요소) 지정된 HTML 요소를 생성함.
document.write(텍스트) HTML 출력 스트림을 통해 텍스트를 출력함.

 

 

 

 

HTML 태그 이름(tag name)을 이용한 선택

 

 

var selected = document.getElementsByTagName("li");
for (var i = 0; i < selected.length; i++) {
  selected.item(i).style.color = "blue";
}

 

 

아이디(id)를 이용한 선택

 

 

 

 

 

See the Pen Untitled by byeolyoon (@byeolyoon) on CodePen.

 

 

 

 

 

 

 

동일한 아이디를 두번째와 네번째에 줬지만 하나만 적용된다.

id를 이용한 선택은 해당 아이디를 가지고 있는 요소 중 첫 번째 요소 단 하나만을 선택하기 때문

따라서 여러 요소를 선택하고 싶을 때는 태그 이름이나 클래스와 같은 다른 방법 사용!

 

 

 

클래스(class)를 이용한 선택

 

var selected = document.getElementsByClassName("odd");
for (var i = 0; i < selected.length; i++){
  selected.item(i).style.color = "green"
}

 

이렇게 하면 여러개 선택 가능.

 

 

name 속성을 이용한 선택

 

var selected = document.getElementsByName("first");
		for (var i = 0; i < selected.length; i++) {
			selected.item(i).style.color = "red";			
		}

 

CSS 선택자(selector)를 이용한 선택

 

querySelectorAll() 메소드를 이용

 

var selected = document.querySelectorAll("li.odd")
		for (var i = 0; i < selected.length; i++) {
			selected.item(i).style.color = "red";			
		}

 

HTML 객체 집합(object collection)을 이용한 선택

 

var title = document.title;
document.write(title);

DOM 요소의 내용 변경

 

HTML 요소의 내용을 변경하는 가장 쉬운 방법은 innerHTML 프로퍼티를 이용

 

var str = document.getElementById("text");
str.innerHTML = "이 문장으로 바뀌었습니다."

 

 

DOM 요소의 스타일 변경

onclick을 사용한 글자색 변경

 

 

See the Pen Untitled by byeolyoon (@byeolyoon) on CodePen.

 

 

 

 

 

 

노드의 종류

 

 

노드로의 접근

 

 

nodeName

 

document.getElementById("document").innerHTML = document.childNodes[1].nodeName; // HTML 문서의 모든 자식 노드 중에서 두 번째 노드의 이름을 선택
document.getElementById("html").innerHTML = document.childNodes[1].childNodes[0].nodeName // html 노드의 모든 자식 노드 중에서 첫 번재 노드의 이름을 선택

 

 

 HTML 문서의 첫 번째 자식 노드는 <!DOCTYPE html>이며 두 번째 자식 노드는 <html>

또한, <html>노드의 첫 번째 자식 노드는 <head>이며, 세 번째 자식 노드는 <body>

 

nodeValue

 

var HeadingText = document.getElementById("heading").firstChild.nodeValue;

document.getElementById("text1").innerHTML = HeadingText;
document.getElementById("text2").firstChild.nodeValue = HeadingText;

 

 innerHTML 프로퍼티 대신에 firstChild.nodeValue를 사용해도 같은 결과를 얻을 수 있음

 

 

nodeType

 

노드 프로퍼티 값
요소 노드(element node) 1
속성 노드(attribute node) 2
텍스트 노드(text node) 3
주석 노드(comment node) 8
문서 노드(document node) 9

 

	<h1 id="heading">nodeType 프로퍼티</h1>
	<p id="head"></p>
	<p id="document"></p>

 

var HeadingType = document.getElementById("heading").firstChild.nodeType;

document.getElementById("head").innerHTML = HeadingType;
document.getElementById("document").innerHTML = document.nodeType;

 

heading의 첫번째 자식요소는 텍스트노드이기때문에 3출력

document에 해당하는 부분은 문서노드이므로 9출력

 

 

노드 리스트

 

 

 

var listItem = document.getElementById("list").childNodes;
listItem[1].firstChild.nodeValue = "HTML 요소의 내용을 변경했어요"

 

자식 노드 중 첫 번째 <li>요소를 선택할 때 인덱스로 0이 아닌 1을 사용 

HTML DOM에서 각 요소 노드 다음에는 별도의 텍스트 노드가 존재하기 때문

 

 

 

See the Pen Untitled by byeolyoon (@byeolyoon) on CodePen.

 

 

 

var text = document.getElementById("text").firstChild;
function appendText() {
  text.insertData(6, " 나른한 ");
}

 

 

 

노드의 조작

var text = document.getElementById("text").firstChild;
function appendText() {
  text.insertData(6, " 나른한 ");
}

 

요소 노드의 생성

 

.createElement() 메소드를 사용하여 새로운 요소 노드를 만들 수 있음

function createNode(){
  var elementNode = document.getElementById("text");
  var newText = document.createTextNode("새로운 텍스트! ");
  elementNode.appendChild(newText);
}

 

 

속성 노드의 생성.

 

createAttribute() 메소드를 사용하여 새로운 속성 노드를 만들 수 있음

 

function createNode(){
  var elementNode = document.getElementById("text");
  var newAttribute = document.createAttribute("style");
  newAttribute.value = "color:orange";
  text.setAttributeNode(newAttribute);
}

 

 

 

removeChild() 메소드

function remove(){
  var parent = document.getElementById("list");
  var removeItem = document.getElementById("item");
  parent.removeChild(removeItem);
}

 

 

removeAttribute() 메소드

속성의 이름을 이용하여 특정 속성 노드를 제거

 

 

 

See the Pen Untitled by byeolyoon (@byeolyoon) on CodePen.

 

 

 

cloneNode() 메소드

 

cloneNode() 메소드는 기존의 존재하는 노드와 똑같은 새로운 노드를 생성