반응형




모든 엘리먼트들의 거희 조상이다.

여러가지 형태의 HTML코드를 객체화 시킨게 DOM 이다.

NODE 관계

엘리먼트는 서로 부모,자식,혹은형제자매 관계로 연결되어 있다.

각각의 Node가 다른 Node와 연결된 정보를 보여주는 API를 통해서 문서를 프로그래밍적으로 탐색할 수 있다.

Node.childNodes

Node.firstChild <-- node 객체의 첫번째 node

Node.lastChild

Node.nextSibling

Node.previousSibling

Node.contains()

Node.hasChildNodes()

<!DOCTYPE html> <html> <head> <title>Page Title</title> <script src="http://code.jquery.com/jquery.min.js"></script> </head> <body id = "body"> <ol> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> </ol> <ul> <li>A</li> <li>B</li> <li>C</li> <li>D</li> </ul> <script> var body = $('body') // var body = document.ElementById('body'); 와 같다 body[0].firstChild // #text body 태그 다음 자식의 첫번째 노드를 출력하는 api다 //결과가 text인 이유는 body 태그다음 줄바꿈 문자가 있어서 그렇다 body[0].firstChild.nextSibling // nextSibling 는 같은 노드의 다음 형제 자매를 부른다 같은 레벨에 있는 node들 body[0].firstChild.previousSibling // previousSibling 는 같은 레벨의 노드중 이전 노드를 부른다 body[0].firstChild.parentNode // parentNode는 부모의 노드를 부른다 body[0].childNodes //자식 노드들을 유사배열로 담아서 호출 </script> </body> </html>

노드의 종류

Node 객체는 모든 구성요소를 대표하는 객체이기 때문에 각각의 구성요소가 어떤 카테고리에 속하는 것인지를 알려주는 식별자를 제공한다.

Node.nodeType //node의 타입을 의미한다 node의 종류에따라서 정해진 상수가 존재한다

for (name in Node){ //각 노드들의 정해진 상수 console.log(name,Node[name]); } ///////출력결과/////////// VM684:2 ELEMENT_NODE 1 VM684:2 ATTRIBUTE_NODE 2 VM684:2 TEXT_NODE 3 VM684:2 CDATA_SECTION_NODE 4 VM684:2 ENTITY_REFERENCE_NODE 5 VM684:2 ENTITY_NODE 6 VM684:2 PROCESSING_INSTRUCTION_NODE 7 VM684:2 COMMENT_NODE 8 VM684:2 DOCUMENT_NODE 9 VM684:2 DOCUMENT_TYPE_NODE 10 VM684:2 DOCUMENT_FRAGMENT_NODE 11 VM684:2 NOTATION_NODE 12 VM684:2 DOCUMENT_POSITION_DISCONNECTED 1 VM684:2 DOCUMENT_POSITION_PRECEDING 2 VM684:2 DOCUMENT_POSITION_FOLLOWING 4 VM684:2 DOCUMENT_POSITION_CONTAINS 8 VM684:2 DOCUMENT_POSITION_CONTAINED_BY 16 VM684:2 DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC 32 이상수를 body.firstChild.nodeType === Node.TextNODE // true 이런식으로 노드객체가 뭔지 확인가능

Node.nodeName

body[0].firstChild.nextSibling.nodeName

// UL 이렇게 BODY 태그의 첫번째자식의 다음번쨰 노드의 이름을 출력한다 (엘리먼트객체의이름)

Node 객체의 값을 제공하는 API

Node.nodeValue

Node.textContent

NODE 추가,변경,삭제 (자식관리)

Node 객체의 자식을 추가하는 방법에 대한 API

Node.appendChild() <-- 인수에 맨뒤에 노드 추가

Node.removeChild() <-- 인수에 노드 제거

Node.replaceChild()

<!DOCTYPE html> <html> <head> <title>Page Title</title> <!-- <script src="http://code.jquery.com/jquery.min.js"></script> --> </head> <body id = "body"> <ol id="ol"> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li id='li4'><a href="#">4</a></li> </ol> <ul> <li id = 'target'>A</li> <li>B</li> <li>C</li> <li>D</li> </ul> <script> var body = document.getElementById('body') var ol = document.getElementById('ol'); var li4 = document.getElementById('li4'); var li = document.createElement('li'); // li 변수에 li엘리먼트를 담음 var text = document.createTextNode('text입니다'); // text 변수에 text노드를 담음 li.appendChild(text); //li 엘리먼트에 text 노드 추가 ol.appendChild(li); // ol엘리먼트에 맨 뒷부분에 li 추가 body.insertBefore(li,body.firstChild); // body의 첫번째 자식 앞에 li 를 추가 li4.parentNode.removeChild(li4); // li4를 제거하기위해서 부모노드로 갔다가 제거 노드 이름을 줘야하는 불편함이있다 var target = document.getElementById('target'); //id 가 target 인걸 담는다 var a = document.createElement('a'); // a태그 엘리먼트를 만든다 a.setAttribute('href','http://naver.com/'); // a태그의 속성으로 href를 추가한다 a.appendChild(document.createTextNode('네이버')); //a태그의 첫번째 자식으로 텍스트를 추가한다 target.replaceChild(a,target.firstChild); // target의 첫번째 자식을(텍스트노드: A) a태그로 바꾼다 </script> </body> </html>


<script> function traverse(target , callback){ if(target.nodeType === Node.ELEMENT_NODE) { //노드의 타입이 엘리먼트노드만 callback(target); // 아래의 익명함수 인자 elem 을 target 로 넣는다 var c = target.childNodes; // body 태그의 자식노드들을 유사배열로 만든다 for (var i=0; i<c.length;i++){ // 유사배열의 자식노드들을 차례대로 콘솔출력 traverse(c[i],callback); } } } traverse(document.getElementById('body'),function(elem){ console.log(elem) }) </script>

위에 써논 기술들의 총집합 요약 소스라고해야하나? 하튼 그렇다..


반응형
반응형

ES6 에서 LET , CONST라는 개념이 도입됫다 es5? 인가?

var a = 'abcd';

var a = 'bcdef';

이렇게 이미선언한 변수를 다시선언하면서 값을 넣는것도 가능하게된

이상한 구문이된다

하지만 let 을 선언하면 저런건 불가능해진다

일반 프로그래밍의 변수 선언과 비슷하게 된다는말이다

let은 변수처럼 다른값을 계속 바꿀수 있찌만

const 는 한번 값을 설정하면 다른데에서 값을 바꿀수는 없다 (참조변수는가능)

// 이미 만들어진 변수이름으로 재선언했는데 아무런 문제가 발생하지 않는다. var a = 'test' var a = 'test2' // hoisting으로 인해 ReferenceError에러가 안난다. c = 'test' var c // let let a = 'test' let a = 'test2' // Uncaught SyntaxError: Identifier 'a' has already been declared a = 'test3' // 값이 재할당이됨 // const const b = 'test' const b = 'test2' // Uncaught SyntaxError: Identifier 'a' has already been declared b = 'test3' //값이 재할당이 안됨 ( 참조변수는 가능)

결론

– ES6 에서는 var는 지양하고 가급적 let과 const를 사용하자

– 원시형에서 변수는 let, 상수는 const로 선언한다

– 참조형은 const로 선언한다


반응형
반응형

자바스크립트에서 String 는 '' 나 "" 로 할수있지만

`` 로 사용할 수 도있다 ''로 사용할경우 변수를 넣을수도있다

const abcd = ` abcdefg `; console.log(`abd ad` + `adf egfle ${abcd}`); //bd adadf egfle abcdefg

상수의 계산에서

3*2 는 6 단순 곱하기이지만

3**2 는 3의 2제곱 9가 된다

<!DOCTYPE html> <html> <head> <title id="title">타이틀 색깔바꾸기</title> </head> <body> <div id="div">안녕하세여</div> </body> <script> const div = document.getElementById('div'); const basecolor = (function(){ if(div.style.color === 'yellow' && div.style.background === 'red'){ div.style.color = 'white'; div.style.background = 'black'; } else { div.style.color = 'yellow'; div.style.background = 'red'; } }); function init(){ div.addEventListener("click",basecolor); // 클릭할때마다 바뀜 // div.addEventListener("mouseenter",basecolor); // 클릭할때마다 바뀜 //window.addEventListener("online",basecolor); //인터넷이 연결됫을때 바뀜 //window.addEventListener("offline",basecolor); // 인터넷이 연결이 끈겻을때 바뀜 // 각종 마우스 이벤트 모음 구글키워드 javascript dom event mdn } init(); </script> </html>

색깔바꾸기 예제

<!DOCTYPE html> <html> <head> <title id="title">타이틀 색깔바꾸기</title> </head> <style> .div{ color : red; background-color: yellow; } .div2{ color : white; background-color: black; } </style> <body> <div id="div">안녕하세여</div> </body> <script> const div = document.getElementById('div'); const colorClick = function(){ if(div.className === 'div2'){ div.className = 'div'; } else { div.className = 'div2'; } } const clickEvent = function(){ div.addEventListener('click',colorClick); } clickEvent(); </script> </html>

위 예제는 스타일은 css 자바스크립트는 로직 으로 바꿔서 한 처리이다

보기좋게 한파일로햇지만 파일을 따로 나눠서 사용하는데 목적을 둔다

-------------------------------------------------------------------------------------------------------------------------------

클릭이벤트

div.addEventListener("click",hangleClick); 와

div.addEventListener("click",hangleClick()); 의 차이는?

아래껀 한번만 실행되고 위에껀 클릭할때마다 실행됨?


반응형
반응형



반응형

+ Recent posts