본문 바로가기

html5 문법 (1) DOM

by Recstasy 2019. 5. 23.

(1) DOM  


DOM이란?

DOM은 Document Object Model의 약자로, 자바스크립트에서는 문서도 객체로 이뤄져 있다. 문서 객체 모델들을 선택하고, 값을 얻거나 수정하는 방식이 프론트 프로그래밍이라 할 수 있다. 웹 프로그래밍에서 '프론트'라 함은 곧, 브라우저 객체 모델(BOM), 문서 객체 모델(DOM)을 얼마나 잘 다룰 수 있느냐에 달려 있다.



DOM에서는 '노드 선택' , '값 취득' , '이동 및 변경' , '이벤트 연결'이 중요하다. 먼저, DOM을 조작하려면, '선택'을 할 수 있어야 한다. DOM을 선택하는 방법은 크게 4가지로 접근할 수 있다.

 getElementById

   태그에 ID값을 < id = '이름지정' > 식으로, 지정하고 ID값을 받아올 수 있는 명령어 

 getElementsByClassName

   태그의 class값을 < class = '클래스명' >으로 지정하고 class값을 받아올 수 있는 명령어

 getElementsByName

   태그이름 자체를 받아올 수 있으며, input과 select 태그에서는 getElementsByName으로 name 속성값을 받아오는 명령어 

 querySelector

   querySelector( '#list' )와 같이 CSS문법으로 값을 받거나 노드를 선택할 수 있는 명령어


1 getElementById

가장 빠르고, 확실한 노드 선택방법으로, 선택하려는 태그에 id값을 부여한다.


[예제]

<div id='first'>

</div>

<script>

var div1 = document.getElementById('first');

div1.innerHTML += '<p>첫번째</p>' ;

</script>

// 결과 :  첫번째 


<div>태그에 first라는 id값을 부여하고, div1 변수에 document.getElementById 명령어로 div를 선택했다. div1.innerHTML 명령어로 <p>태그값을 넣으면, id값이 first인 <div>태그에 <p>내용</p>값이 들어간다.


2 『getElementsByClassName

id와 사용방법이 같으며, class의 이름을 선택하는 부분에 차이가 있다.


[예제]

<ul>

<li><a href='www.mogl3d.com' id='first' class='mogl'>첫번째</a></li>

<li><a href='www.naver.com' id='second' class='mogl'>두번째</a></li>

<li>세번째</li>

</ul>

<script>

var div1 = document.getElementsByClassName('mogl');

console.log(div1.length);

for(var i=0; i<div1.length; i++){

console.log(div1.item(i).id);

};

</script>


class값을 mogl로 두고, div1 변수에 mogl 클래스를 불러온다. (배열로 저장)

mogl 클래스가 2개 있기 때문에, div1에는 배열로 저장된다. 따라서 for 루프구문으로 class를 하나씩 불러온다.


"div1.item(i).속성값"으로 해당 태그에 들어있는 속성값을 알 수 있다. 여기서 class는 같은 이름이 여러태그에 적용될 수 있기에 주로 배열이 저장된다. getElementsBy..... 와 같은 이름으로 선택해야 하는 경우는 '배열'로 저장된다. 따라서 getAttribute( ), setAttribute( ), removeAttribute( ) 와 같은 속성 매소드를 사용하려면, item(i) 매서드나 div1[i] 를 사용해야 한다.


3 getElementsByTagNames


[예시]

<form>

<input type="text" size='50' name="btn" value="" >

</form>

<script>

var btn_ = document.getElementsByName('btn');

var current = new Date();

btn_[0].value = current.toString();

</script>


위의 코드는 input 태그의 value값에 표준시간을 넣는 예제이다. btn 변수에 getElementsByName으로 name이 'btn'인 노드를 선택했다. 


여기서 주의할 점은 Elements(복수형)로 끝나는 요소일 경우 배열이기 때문에 반드시 [ ] 또는 item( )를 받은 변수의 뒤에 붙여서 값을 넣어줘야 한다. 가끔 배열임을 생각하지 못하고, 그냥 변수명과 프로퍼티를 넣을 경우에는 에러가 발생하기 때문에 이점 주의하자. (getElementsByClassName일 경우에는 예외)


4 querySelectorAll 

위의 3가지 메소드와 달리 좀더 디테일하게 노드를 선택할 수 있는 명령어가 querySelector이다. querySelector / querySelectorAll 를 사용한다면, 태그 아래의 부분도 쉽게 선택할 수 있다. 가령, id='myList'인 태그 아래의 class='art'라는 img태그를 검색하고 싶다면, ` #myList img.art `라고 검색하면 된다.  

* 

 모든 요소 취득 

 [예시] 

 #id

 지정한 ID요소를 취득 

 [예시] #list 

 .class

 지정한 클래스명의 요소를 취득 

 [예시] .myclass 

 elem

 지정한 태그명의 요소를 취득 

 li 

 selector1 , selector2 , selectorX

 해당하는 셀렉터에 일치하는 요소를 모두 취득 

 #list, div 

 parent > child

 부모 요소의 자식 요소를 취득 

 #list > div 

 조상 -> 자손

 상위 요소에서 하위 요소를 모두 취득   #list li 
 prev + next

 prev 요소의 전후의 next요소를 모두 취득 

 #myDiv + div 

 prev ~ siblings

 prev 요소 이후의 형제 요소를 취득 

 #myDiv ~ div 
 [attr]

 지정한 속성을 가진 요소를 취득 

 input[type] 

 [attr = value]  속성이 value값과 동등한 요소를 취득 

 input[type="button"] 

 [attr ^=value]  속성이 value로 시작하는 값을 지닌 요소를 취득 

 a[href^="https://"] 

 [attr $=value]  속성이 value로 끝나는 값을 지닌 요소를 취득   img[src$=".gif"] 
 [attr *= value]  속성이 value를 포함하는 값을 지닌 요소를 취득   [title*="sample"] 
 [selector1] [selector2] [selectorX]

 복수의 속성 필터 모두에 매치하는 요소를 취득 

 img[src][alt] 



[예시]

<ul id='me'>

<li><a href="http://www.naver.com" class="my">Node.JS</a></li>

<li><a href="http://www.daum.com" class="my">Node.JS</a></li>

<li><a href="http://www.modl3d.com" class="my">Node.JS</a></li>

</ul>


<script type="text/javascript">

var my_ = document.querySelectorAll('#me .my');

for(var i=0; i<my_.length; i++){

console.log(my_.item(i).href);

}

</script>


// 결과 : http://www.naver.com

            http://www.daum.net

            http://www.mgl3d.com


단, querySelector 메소드는 document.getElementById에 비해 속도가 느리다.

댓글

최신글 전체

이미지
제목
글쓴이
등록일