<html>
<head>
<title>This is title</title>
</head>
<body>
<h1>Lorem ipsum dolor sit amet
consectetur adipisicing elit.
...
Explicabo unde blanditiis quam?</h1>
<form action="">
<button>Click Me</button>
</form>
</body>
</html>
DOM
์ Document Object Model(๋ฌธ์๊ฐ์ฒด๋ชจ๋ธ)์ ์ฝ์๋ก HTML, XML ๋ฌธ์์ ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๊ณ ์ํธ์์ฉํ๊ธฐ ์ํ API์ด๋ค.
DOM์ ๋ฌธ์์ ๊ตฌ์กฐํ๋ ํํ(structured representation)์ ์ ๊ณตํ๋ค. DOM์ ๋ฌธ์๋ฅผ ๋ ผ๋ฆฌ ํธ๋ฆฌ๋ก ํํํ๊ณ ๊ฐ ๋ ธ๋๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋๋ค.
๋, getElementById()
, createElement()
, style object
๋ฑ์ API๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ DOM ๊ตฌ์กฐ์ ์ ๊ทผํ์ฌ ๊ทธ๋ค์ด ๋ฌธ์ ๊ตฌ์กฐ, element์ ์คํ์ผ, ๋ด์ฉ ๋ฑ์ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋๋๋ค.
(๊ณต๋ถ๋ฅผ ํ๊ธฐ ์ ์๋ getElementById()์ ๊ฐ์ ํจ์๋ค์ด ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์์ธ์ค ์์๋ค...๐
)
DOM ์ ๊ตฌ์กฐํ๋ nodes์ property ์ method ๋ฅผ ๊ฐ๊ณ ์๋ objects๋ก ๋ฌธ์๋ฅผ ํํํ๋ค. ์ด๋ค์ ์น ํ์ด์ง๋ฅผ ์คํฌ๋ฆฝํธ ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์์ ์ฌ์ฉ๋ ์ ์๊ฒ ์ฐ๊ฒฐ์์ผ์ฃผ๋ ์ญํ ์ ๋ด๋นํ๋ค.
์ฌ๊ธฐ์ ๋งํ๋ ๋ฌธ์์ธ Document๋ ์นํ์ด์ง๋ฅผ ๋งํ๋ค. ์ด ๋ฌธ์๋ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ๋ด์ฉ์ด ํด์๋๊ณ , ์น ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ํ๋๊ฑฐ๋ HTML ์์ค ์์ฒด๋ก ๋ํ๋๋ค. ๋ฌธ์์ ๋ชจ๋ element์ธ html
, body
, title
, head
, button
๊ณผ ๊ฐ์ ํ๊ทธ๋ค์ ๋ฌธ์๋ฅผ ์ํ document object model ์ ํ ๋ถ๋ถ์ด๋ผ๊ณ ํ ์ ์๋ค.
๐ ๋ฌธ์์ ๋ฌธ์์ ์์์ ์ ๊ทผํ๊ธฐ ์ํด DOM์ด ์ฌ์ฉ๋ ์:
var paragraphs = document.getElementsByTagName("P");
// paragraphs[0] is the first <p> element
// paragraphs[1] is the second <p> element, etc.
alert(paragraphs[0].nodeName);
HTML DOM method ์ค ํ๋์ธ getElementsByTagName()
์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ์๋ ๋
๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ ํ์ด์ฌ์์ ์ฌ์ฉํ ์ ๋ ์๋ค.
๐ ํ์ด์ฌ์์ getElementsByTagName()๊ฐ ์ฌ์ฉ๋ ์:
# Python DOM example
import xml.dom.minidom as m
doc = m.parse("C:\\Projects\\Py\\chap1.xml");
doc.nodeName # DOM property of document object;
p_list = doc.getElementsByTagName("para");
์น ๋งํฌ์
์ธ์ด์ธ HTML์ DOM ์ฝ์ด์ ์ ์๋ ์ถ์ํ ๊ฐ๋
์ ์๋ฆฌ๋จผํธ์ ์๋ฏธ๋ฅผ ๋ํ ๋ ์ด์ด๋ผ๊ณ ํ ์ ์๊ฒ ๋ค. HTML DOM์ HTML ์๋ฆฌ๋จผํธ์ className ๊ฐ์ ์์ฑ๊ณผ document.body ๊ฐ์ API๋ ํฌํจํ๋ค.
ex) HTML DOM Anchor Object: HTML์์ <a>
element๋ก ํํ๋๋ Anchor ๊ฐ์ฒด
DOM ์ ์น ํ์ด์ง์ ๊ฐ์ฒด ์งํฅ ํํ์ด๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ ์คํฌ๋ฆฝํ ์ธ์ด๋ฅผ ์ด์ฉํด DOM ์ ์์ ํ ์ ์๋ค. DOM ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์๋์ง๋ง DOM ์ด ์๋ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๋ ์น ํ์ด์ง ๋๋ XML ํ์ด์ง ๋ฐ ์์๋ค๊ณผ ๊ด๋ จ๋ ๋ชจ๋ธ์ด๋ ๊ฐ๋ ๋ค์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง ๋ชปํ๊ฒ ๋๋ค.
์ด์ฐฝ๊ธฐ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ DOM ๊ฐ ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ๋์ด ์์์ง๋ง, ๋์ค์๋ ๊ฐ๊ฐ ๋ถ๋ฆฌ๋์ด ๋ฐ์ ํด์๋ค. ํ์ด์ง ์ฝํ ์ธ (the page content)๋ DOM ์ ์ ์ฅ๋๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์ ๊ทผํ๊ฑฐ๋ ์กฐ์ํ ์ ์๋ค. ์ด๊ฒ์ ๋ฐฉ์ ์์ผ๋ก ํํํ๋ฉด ์๋์ ๊ฐ๋ค:
API (web or XML page) = DOM + JS (scripting language)
์น๋ธ๋ผ์ฐ์ ์์ HTMLํ์ผ์ ๋ฐ์ DOM์ผ๋ก ๋ง๋ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์ฌ๋ฌ๊ฐ์ง ์กฐ์์ด ๊ฐ๋ฅํด์ง๋ค! (๋ชจ๋ DOM์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ ๋: ๋ฌธ์๊ฐ ๋ก๋๋ ๋!)
์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ๋(์ธ๋ผ์ธ <script>
์์๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์น ํ์ด์ง ์์ ์๋ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ), ๋ฌธ์ ์์ฒด๋ฅผ ์กฐ์ํ๊ฑฐ๋ ๋ฌธ์์ children ์ ์ป๊ธฐ ์ํด document
๋๋ window
elements ๋ฅผ ์ํ API ๋ฅผ ์ฆ์ ์ฌ์ฉํ ์ ์๋ค.
๊ณต๋ถ๋ฅผ ํ๋ค๋ณด๋ doucment๋ ์ ํํ ๋ฌด์์ด๊ณ , element์ node๋ ๋ฌด์จ์ฐจ์ด๊ฐ ์๋์ง ์์ดํด๊ฐ ์ ๊ฐ ๋จธ๋ฆฟ์์ด ๋ณต์กํ๋ค.
๋คํํ๋ MDN Web Docs์ ๊ฐ๋ ์ด ์ ์ ๋ฆฌ๊ฐ ๋์ด์์ด์ ์ด์ ์ดํด๊ฐ ๋์๋ค!
Node
: ์ฌ๋ฌ ๊ฐ์ง DOM ํ์
๋ค์ด ์์ํ๋ ์ธํฐํ์ด์ค์ด๋ฉฐ ๊ทธ ๋ค์ํ ํ์
๋ค์ ๋น์ทํ๊ฒ ์ฒ๋ฆฌํ ์ ์๊ฒ ํ๋ค.
Node.childNodes
, Node.firstChild
, Node.lastChild
, Node.parentNode
๋ Node.appendChild()
, Node.hasChildNodes()
์ ๊ฐ์ด ํธ๋ฆฌ ๊ตฌ์กฐ์ ๊ด๋ จ๋ ์์ฑ์ด๋ ํจ์๋ฅผ ์ ๊ณตํ๋ค. Document
: ๋ธ๋ผ์ฐ์ ๊ฐ ๋ถ๋ฌ์จ ์น ํ์ด์ง๋ฅผ ๋ํ๋ด๋ ์ธํฐํ์ด์ค๋ก ํ์ด์ง ์ฝํ
์ธ (DOM ํธ๋ฆฌ)์ ์ง์
์ ์ญํ ์ ์ํํ๋ค. (DOM ํธ๋ฆฌ๋ <body>
์ <table>
๋ฐ ์ฌ๋ฌ ๋ค๋ฅธ ์์๋ฅผ ํฌํจํ๋ค.)
Document.cookie
, Document.URL
, document.getElementsByName()
, document.write()
๋ฑ์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.Element
: Document ์์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์์ํ๋ ์ ์ผ ๋ฒ์ฉ์ ์ธ ๊ธฐ๋ฐ ํด๋์ค๋ก ๊ณตํต ๋ฉ์๋์ ์์ฑ๋ง ๊ฐ๋๋ค.
Element.attributes
,Element.className
, Element.innerHTML
์ Element.querySelector()
, Element.querySelectorAll()
, Element.getElementsByClassName()
์ ๊ฐ์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.EventTarget
: ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ์ ์์ผ๋ฉฐ, ์ด๋ฒคํธ์ ๋ํ ์์ ๊ธฐ(listener)๋ฅผ ๊ฐ์ง ์ ์๋ ๊ฐ์ฒด๊ฐ ๊ตฌํํ๋ DOM ์ธํฐํ์ด์ค
EventTarget.addEventListener()
, EventTarget.addEventListener()
๋ฑ์ ๋ฉ์๋ ์ ๊ณต