본문 바로가기

Programing/HTML & CSS

[HTML] DOM - DOCUMENT OBJECT MODEL

출처 : 코드스테이츠

 

THE DOM IS...

· HTML 문서의 구조적 관계와 속성에 대한 모델

· HTML 문서를 대표하는 트리 구조

· JavaScript에서 document 객체를 통해 전역으로 접근할 수 있음

 

THE DOM IS NOT...

· JavaScript 언어의 한 부분

 

 

 

ANATOMY OF AN HTML ELEMENT

Element는 Opening Tag와 Closing Tag를 다 포함한 것

 

사진출처 : MDN

 

 

 

 

$0

선택했던 것에대한 정보가 나옴.. ?

console.dir($0) 해보면

element에 내장된 속성을 객체로 볼 수 있음.

 

요소를 선택할때마다 $0이 바뀜

$0.parentElement / 현재 선택된 요소의 부모를 확인할 수 있음.

$0.children / 현재 선택된 요소의 자식을 확인할 수 있음.

$0.innerHTML = '입력한대로 바뀜' 

 

 

 

IT CONTAINS...

· nodeName

· className

· innerHTML

· textContent

· style

· attributes

· childNodes / parentNode

· children / parentElement

· dataset

· offsetTop / offsetLeft / offsetWidth / offsetHeight

· clientTop / clientLeft / clientWidth / clientHeight

· onEventName (e.g. onClick)

 

 

 

 

 

 

 

 

<ul>을 선택하고 $0.children하면 

리스트가 3개이므로 HTMLCollection(3) [li, li, li] 이렇게 뜸.

그런데 $0.childNodes라고하면 NodeList가 7개가 뜸.

 

<li>, </li>, <ul>, </ul>간의 간격을 text라고함 text까지 포함하여 7개다.

 

 

 

 

 

ELECTING ELEMENTS

어떻게 HTML element를 JavaScript를 이용해 가져올 수 있을까요?

 

· tag name을 이용: getElementsByTagName

· id 속성을 이용: getElementById

· class name을 이용: getElementByClassName

· selector를 이용: querySelector / querySelectorAll

 

 

ex ) 

document.getElementById('selecting-elements') // 해당 id를 불러올 수있음

document.getElementByClassName('present') // 해당 class를 불러옴

document.querySelector('#selecting-elements') // 해당 id를 불러올 수있음

document.querySelectorAll('.present') // 해당 class를 불러옴

document.querySelectorAll('h2') // 해당 태그를 다 불러옴

 

 

 

ADDING EVENT HANDLER

· Event: 어떠한 동작의 발생을 전달하기 위해 객체가 보낸 메시지

    · e.g.

        · 웹페이지의 로드

        · 버튼의 클릭

        · 브라우저 창의 Resize

        · on~~ 이렇게 적힌 것은 대부분 event

· DOM을 이용해 이벤트 핸들러를 추가할 수 있음

    · onEventName (e.g. onClick)

 

 

(콘솔에서)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var btn = document.querySelector('#mybutton'); // mybutton이라는 id를 선택
console.dir(btn) // 여러정보와 이벤트목록을 확인할 수있음 ..
btn.onclick = function() {
    console.log('클릭!!!!');
};
 
// 이렇게 입력할 시 버튼을 클릭하면 '클릭!!!!' 이라고 콘솔에 입력된다.
 
 
var input = document.querySelector('input');
input.onkeyup = function() {
    console.log('타이핑 중...')
}
// 입력할때 콘솔창에 타이핑 중이라고 뜸.
cs

 

 

 

input text에 입력한 값대로 결과창에 표시하기

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 <!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
 
    <input id="myinput" type="text">
    <button id="mybutton">버튼</button>
    <div id="result">결과창</div>
 
    <script type="text/javascript" src="main.js"
    </script>
    <!-- 자바스크립트 불러오기 위치는 바디위에올려놓으면 됨-->
  </body>
</html>
cs

 

main.js

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var myinput = document.querySelector('#myinput');
var mybutton = document.querySelector('#mybutton');
var result = document.getElementById('result');
 
console.log(myinput);
console.log(mybutton);
console.log(result);
 
// 1. mybutton이 눌렸을 때,
// 2. myinput의 값을 가져온다.
// 3. 가져온 값을 result에 찍는다.
 
mybutton.onclick = function() {
    var myvalue = myinput.value;
    result.innerHTML = myvalue;
}
// result에 myvalue값이 나옴.
cs

 

 

결과

 

 

main.js (입력과 동시에 결과창에 보여지기)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
// 1. myinput에 타이핑을 할 때,
// 2. myinput의 값을 가져온다.
// 3. 가져온 값을 result에 찍는다.
 
function printResult() {
    var myvalue = myinput.value;
    result.innerHTML = myvalue;
}
 
myinput.onkeyup = printResult;
// printResult();라고 안쓰고 printResult;라고 쓴 이유 !
// printResult();라고 입력해버리면, 함수가 실행되버리기 떄문.
// myinput.onkeyup = 이곳에는 함수가 입력되어야 할 자리기 때문.
cs

 

 

 

 

CREATING ELEMENT

어떻게 JavaScript를 이용해 HTML element를 생성하고 렌더링할 수 있을까요?

 

1
2
3
4
5
6
function createButton() {
    var btn = document.createElement("BUTTON");
    var t = document.createTextNode("Click Me!");
    btn.appendChild(t);
    document.body.appendChild(btn);
}
cs

 

 

THE JQUERY WAY!

1
2
3
4
5
function createButton() {
    var $btn = $('<button>Click Me!</button>');
    var $body = $('body');
    btn.appendTo($body);
}
cs

 

MORE SIMPLY

1
2
3
function createButton() {
    $('<button>Click Me!</button>').appendTo('body');
}
cs

 

 

 

 

 

 

 

 

 

 

JQUERY (OPTIONAL)

 

WHY JQUERY?

· 커뮤니티의 지원이 훌륭합니다

· DOM 조작을 비교적 수월하게 합니다

· AJAX의 사용이 간편합니다

· 간단한 애니메이션도 쉽게 만들 수 있습니다

· 다양한 플러그인들이 있습니다

· 버그의 신속한 수정이 이루어지고 있습니다

https://www.webdesignerdepot.com/2012/09/jquery-the-good-the-bad-and-the-ugly/

· 강력한 method chaining을 쓸 수 있습니다

 

 

 

BASIC JQUERY SYNTAX

· Element 선택

    · $(selector)

· Element 생성

    · $(htmlstring)

    · $('<div></div>')

· 항상 jQuery object를 리턴합니다 (array-like)

 

 

 

USEFUL METHODS

· 조작

    · addClass / removeClass

    · html / text

    · append / appendTo

    · prepend / prependTo

    · remove / empty

    · val

· 이벤트

    · on / off

· 효과

    · show / hide

 

 

 

JQUERY CHEET SHEET

http://htmlcheatsheet.com/jquery/

 

 

 

 

 

 

 

 

'Programing > HTML & CSS' 카테고리의 다른 글

[CSS] CSS & SELECTOR  (0) 2019.02.24
[HTML] WHAT IS HTML  (0) 2019.02.24