DOM ã¯è¦ç´ ãã³ã³ãã³ãã«å¯¾ãã¦æ§ã ãªãã¨ãã§ãã¾ãããæåã«å¯¾å¿ãã DOM ãªãã¸ã§ã¯ãã«å°éããå¿ è¦ãããã¾ãã
DOM ä¸ã®ãã¹ã¦ã®æä½ã¯ document ãªãã¸ã§ã¯ãããå§ã¾ãã¾ããããããä»»æã®ãã¼ãã«ã¢ã¯ã»ã¹ã§ãã¾ãã
ãã㯠DOM ãã¼ãéãç§»åã§ãããªã³ã¯ã®å³ã§ãã:
ãããã«ã¤ãã¦ããæ·±ãè°è«ãã¾ãããã
ããã: documentElement 㨠body
æä¸ä½ã®ããªã¼ãã¼ã㯠document ããããã£ã¨ãã¦ç´æ¥å©ç¨å¯è½ã§ã:
<html>=document.documentElement- æä¸ä½ã®ããã¥ã¡ã³ããã¼ãã¯
document.documentElementã§ã<html>ã¿ã°ã® DOM ãã¼ãã§ãã <body>=document.body- ããï¼ã¤ã®åºã使ããã¦ãã DOM ãã¼ãã¯
<body>è¦ç´ ã§ã âdocument.body. <head>=document.head<head>ã¿ã°ã¯document.headã§å©ç¨å¯è½ã§ãã
document.body 㯠null ã«ãªãå ´åãããã¾ãã¹ã¯ãªããã¯å®è¡æã«åå¨ããªãè¦ç´ ã¸ã¢ã¯ã»ã¹ã§ãã¾ããã
ç¹ã«ãã¹ã¯ãªããã <head> ã®å
å´ã«ããå ´åããã©ã¦ã¶ã¯ã¾ã body ãèªã¿è¾¼ãã§ããªããããdocument.body ã¯å©ç¨ã§ãã¾ããã
å¾ã£ã¦ã以ä¸ã®ä¾ã§ã¯æåã® alert 㯠null ã表示ãã¾ã:
<html>
<head>
<script>
alert( "From HEAD: " + document.body ); // null, ã¾ã <body> ã¯ããã¾ãã
</script>
</head>
<body>
<script>
alert( "From BODY: " + document.body ); // HTMLBodyElement, ä»ã¯åå¨ãã¾ã
</script>
</body>
</html>
null 㯠âåå¨ããªãâ ãæå³ãã¾ãDOM ã§ã¯ãnull å¤ã¯ âåå¨ããªãâ ããã㯠âãã®ãããªãã¼ãã¯ãªãâ ãæå³ãã¾ãã
å: childNodes, firstChild, lastChild
ãããã使ã2ã¤ã®ç¨èªãããã¾ãã:
- åãã¼ã (ã¾ãã¯å) â ç´æ¥ã®åè¦ç´ ã§ããã¤ã¾ããä¸ããããè¦ç´ ã«ãã¹ãããã¦ãã¾ããä¾ãã°
<head>ã¨<body>ã¯<html>è¦ç´ ã®åã§ãã - åå« â åè¦ç´ ãããã«ãã®åè¦ç´ ãªã©ãæå®ãããè¦ç´ ã«ãã¹ãããããã¹ã¦ã®è¦ç´ ã§ãã
ä¾ãã°ãããã§ <body> ã¯å <div> 㨠<ul> (ã¨ããã¤ãã®ç©ºã®ããã¹ããã¼ã)ãæã¡ã¾ãã:
<html>
<body>
<div>Begin</div>
<ul>
<li>
<b>Information</b>
</li>
</ul>
</body>
</html>
â¦ã¾ãã <body> ã®ãã¹ã¦ã®åå«ã¯ãç´æ¥ã®å <div>, <ul> ã ãã§ãªãã<li> (<ul> ã®å) ã <b> (<li> ã®å)ã®ãããªãããã«ãã¹ããããè¦ç´ ãå«ã â ãµãããªã¼å
¨ä½ã§ãã
childNodes ã®ã³ã¬ã¯ã·ã§ã³ã¯ãããã¹ããã¼ããå«ããã¹ã¦ã®åãã¼ããæã¡ã¾ãã
以ä¸ã¯ document.body ã®åã表示ãã¾ã:
<html>
<body>
<div>Begin</div>
<ul>
<li>Information</li>
</ul>
<div>End</div>
<script>
for (let i = 0; i < document.body.childNodes.length; i++) {
alert( document.body.childNodes[i] ); // Text, DIV, Text, UL, ..., SCRIPT
}
</script>
...ä»ã®è¦ç´ ...
</body>
</html>
ããã§è峿·±ãç¹ã«æ³¨ç®ãã¦ãã ãããä¸ã®ä¾ãå®è¡ããã¨ã表示ãããæå¾ã®è¦ç´ 㯠<script> ã§ããå®éã«ã¯ãããã¥ã¡ã³ãã¯ãã以éã«ããå¤ãã®ãã®ãæã¡ã¾ãããã¹ã¯ãªããå®è¡æç¹ã§ãã©ã¦ã¶ã¯ã¾ã ãããã¯èªã¿è¾¼ãã§ããªããããã¹ã¯ãªããã«ãããã¯è¦ãã¾ããã
ãããã㣠firstChild 㨠lastChild ã§æåã¨æå¾ã®åã¸ã®é«éãªã¢ã¯ã»ã¹ãã§ãã¾ã
ãããã¯åãªãç°¡ç¥è¡¨è¨ã§ããåãã¼ããåå¨ããå ´åã¯ãå¸¸ã«æ¬¡ã®ããã«ãªãã¾ã:
elem.childNodes[0] === elem.firstChild
elem.childNodes[elem.childNodes.length - 1] === elem.lastChild
åãã¼ãããããã©ããããã§ãã¯ããããã®ç¹å¥ãªé¢æ° elem.hasChildNodes() ãããã¾ãã
DOM ã³ã¬ã¯ã·ã§ã³
ã覧ã®éããchildNodes ã¯é
åã®ããã«è¦ãã¾ããããå®éã«ã¯é
åã§ã¯ãªãããã ã³ã¬ã¯ã·ã§ã³ â ç¹å¥ãªé
åã©ã¤ã¯ã§å復å¯è½ãªãªãã¸ã§ã¯ãã§ãã
2ã¤ã®éè¦ãªç¹ãããã¾ã:
- å復ããé
for..ofã使ãã¾ã:
for (let node of document.body.childNodes) {
alert(node); // ã³ã¬ã¯ã·ã§ã³ã®ãã¹ã¦ã®ãã¼ãã表示ãã
}
ããã¯å復å¯è½(å¿
é ã§ Symbol.iterator ããããã£ãæä¾ãã)ã®ããã§ãã
- é åã§ã¯ãªããããé åã¡ã½ããã¯åä½ãã¾ãã:
alert(document.body.childNodes.filter); // undefined (ãã£ã«ã¿ã¡ã½ãããæã£ã¦ãã¾ãã!)
æåã®1ã¤ç®ã¯è¯ãã§ãã2ã¤ç®ããé
åã¡ã½ãããå¿
è¦ãªå ´åã¯ãArray.from ã§ã³ã¬ã¯ã·ã§ã³ãã âæ¬å½ã®â é
åãä½ããã¨ãã§ããã®ã§è¨±å®¹ã§ãã¾ãã:
alert( Array.from(document.body.childNodes).filter ); // ããã§ä½¿ãã¾ã
DOM ã³ã¬ã¯ã·ã§ã³ãããã« â ãã®ç« ã§ãªã¹ãããã¦ãã ãã¹ã¦ã® ããã²ã¼ã·ã§ã³ããããã£ã¯èªã¿åãå°ç¨ã§ãã
代å
¥ childNodes[i] = ... ãªã©ã§åãã¼ããç½®ãæãããã¨ã¯ã§ãã¾ããã
DOM ã®å¤æ´ã¯ä»ã®ã¡ã½ãããå¿ è¦ã¨ãã¾ãããããã«ã¤ãã¦ã¯æ¬¡ã®ç« ã§è¦ã¦ããã¾ãããã
ä¸é¨ã®ä¾å¤ãé¤ããã»ã¼ãã¹ã¦ã® DOM ã³ã¬ã¯ã·ã§ã³ã¯ ã©ã¤ã ã§ã ãã¤ã¾ããããã㯠DOM ã®ç¾å¨ã®ç¶æ ãåæ ãã¦ãã¾ãã
ãããelem.childNodes ã¸ã®åç
§ãç¶æããDOM ã«ãã¼ãã追å /åé¤ããã¨ãã³ã¬ã¯ã·ã§ã³ã®ä¸ã«èªåçã«åæ ããã¾ãã
for..in ã使ããªãã§ãã ããã³ã¬ã¯ã·ã§ã³ã¯ for..of ã§å復å¯è½ã§ããæã
for..in ã使ããã¨ãã人ããã¾ãã
for..in ã¯ä½¿ããªãã§ãã ãããfor..in ã«ã¼ãã¯ãã¹ã¦ã®åæå¯è½ãªããããã£ãå復ãã¾ããã³ã¬ã¯ã·ã§ã³ã¯ãé常ã¯åå¾ä¸è¦ãªããã¤ãã® âä½åãªâ ã»ã¨ãã©ä½¿ãããªãããããã£ãæã£ã¦ãã¾ã:
<body>
<script>
// 0, 1, length, item, values ãªã©ã表示ããã¾ãã
for(let prop in document.body.childNodes) alert(prop);
</script>
</body>
å å¼ã¨è¦ª
å å¼(Siblings) ã¯åã親(parent)ã®åãã¼ãã§ãã
ä¾ãã°ã<head> 㨠<body> ã¯å
å¼ã§ã:
<html>
<head>...</head><body>...</body>
</html>
<body>ã¯<head>ã® âæ¬¡ã®â ã¾ã㯠âå³ã®â å å¼ã¨è¨ããã¾ãã<head><body>ã® âåã®â ã¾ã㯠âå·¦ã®â å å¼ã¨è¨ããã¾ãã
次ã®ãã¼ã(次ã®å
å¼) 㯠nextSibling ã§ãããåã®ãã¼ã㯠previousSibling ã§ãã
親㯠parentNode ã¨ãã¦å©ç¨å¯è½ã§ãã
ä¾ãã°:
// <body> ã®è¦ªã¯ <html> ã§ãã
alert( document.body.parentNode === document.documentElement ); // true
// <head> ã®å¾ã¯ <body> ã«è¡ãã¾ãã
alert( document.head.nextSibling ); // HTMLBodyElement
// <body> ã®å㯠<head> ã§ãã
alert( document.body.previousSibling ); // HTMLHeadElement
Element-only navigation
ä¸ã§ãªã¹ãããã¦ããããã²ã¼ã·ã§ã³ããããã£ã¯ ãã¹ã¦ã® ãã¼ããåç
§ãã¾ããä¾ãã°ãchildNodes ã§ã¯ãããã¹ããã¼ããè¦ç´ ãã¼ãã®ä¸¡æ¹ããããã«åå¨ããå ´åã«ã¯ã³ã¡ã³ããã¼ããè¦ããã¨ãã§ãã¾ãã
ããããå¤ãã®ã¿ã¹ã¯ã§ã¯ãããã¹ããã¼ããã³ã¡ã³ããã¼ãã¯å¿ è¦ããã¾ãããã¿ã°ã表ãããã¼ã¸ã®æ§é ãå½¢æããè¦ç´ ãã¼ããæä½ãããã§ãã
ãªã®ã§ãè¦ç´ ãã¼ã ã ããèæ ®ã«ãããããã²ã¼ã·ã§ã³ãªã³ã¯ããã£ã¨è¦ã¦ã¿ã¾ããã:
ãªã³ã¯ã¯ä¸ã§ä¸ãããããã®ã¨ä¼¼ã¦ãããElement ã¨ããè¨èãå
é¨ã«ããã¾ã:
childrenâ è¦ç´ ãã¼ãã®åã®ã¿ã§ããfirstElementChild,lastElementChildâ æå/æå¾ã®è¦ç´ ã®åã§ããpreviousElementSibling,nextElementSiblingâ é£ã®è¦ç´ ã§ããparentElementâ 親ã®è¦ç´ ã§ãã
parentElement? 親ã¯è¦ç´ ã§ã¯ãªã å ´åã¯ããã¾ããï¼parentElement ããããã£ã¯ âè¦ç´ â ã®è¦ªãè¿ãã¾ãããparentNode 㯠âä»»æã®ãã¼ãâ ã®è¦ªãè¿ãã¾ãããããã®ããããã£ã¯é常åãã§ã: 両æ¹ã¨ã親ãåå¾ãã¾ãã
document.documentElement ã®ä¾å¤ãé¤ãã¦:
alert( document.documentElement.parentNode ); // document
alert( document.documentElement.parentElement ); // null
è¨ãæããã¨ãdocumentElement (<html>) ã¯ã«ã¼ããã¼ãã§ããå
¬å¼ã«ã¯ãã®è¦ªã¨ã㦠document ãæã£ã¦ãã¾ããããããdocument ã¯è¦ç´ ãã¼ãã§ã¯ãªãã®ã§ãparentNode ã¯ãããè¿ããparentElement ã¯è¿ãã¾ããã
ããã¯ãä»»æã®è¦ç´ elem ãã <html> ã«ç§»åãããããdocument ã«ã¯ç§»åããããªå ´åã«å½¹ç«ã¡ã¾ã:
while(elem = elem.parentElement) { // go up till <html>
alert( elem );
}
ä¸ã®ä¾ã®1ã¤ãä¿®æ£ãã¦ã¿ã¾ããã: childNodes ã children ã«ç½®ãæãã¾ããããã§è¦ç´ ã®ã¿ã表示ããã¾ãã:
<html>
<body>
<div>Begin</div>
<ul>
<li>Information</li>
</ul>
<div>End</div>
<script>
for (let elem of document.body.children) {
alert(elem); // DIV, UL, DIV, SCRIPT
}
</script>
...
</body>
</html>
ä»ã®ãªã³ã¯: tables
ä»ã¾ã§ãåºæ¬çãªããã²ã¼ã·ã§ã³ããããã£ã説æãã¾ããã
ç¹å®ã®ç¨®é¡ã® DOM è¦ç´ ã¯ã便å®ä¸ããã®ç¨®é¡ã«åºæã®è¿½å ã®ããããã£ãæä¾ãããã¨ãããã¾ãã
ãã¼ãã«ã¯ãã®ç´ æ´ãããä¾ã§ããéè¦ãªã±ã¼ã¹ã§ãã
<table> è¦ç´ ã¯æ¬¡ã®ããããã£ããµãã¼ããã¾ã(ä¸ã§ä¸ãããããã®ã«å ãã¦):
table.rowsâ ãã¼ãã«ã®<tr>è¦ç´ ã®ã³ã¬ã¯ã·ã§ã³ã§ããtable.caption/tHead/tFootâ è¦ç´<caption>,<thead>,<tfoot>ã¸ã®åç §ã§ããtable.tBodiesâ<tbody>è¦ç´ ã®ã³ã¬ã¯ã·ã§ã³(æ¨æºã«ããã¨å¤æ°ã«ãªãã¾ã) ã§ãã
<thead>, <tfoot>, <tbody> è¦ç´ 㯠rows ããããã£ãæä¾ãã¾ã:
tbody.rowsâ å å´ã®<tr>ã®ã³ã¬ã¯ã·ã§ã³
<tr>:
tr.cellsâ ä¸ãããã<tr>ã®ä¸ã®<td>ã¨<th>ã»ã«ã®éåã§ããtr.sectionRowIndexâ å²ãã§ãã<thead>/<tbody>ã®å é¨ã«ããä¸ãããã<tr>ã®çªå·ã§ããtr.rowIndexâ ãã¼ãã«å ã®<tr>ã®çªå·ã§ãã
<td> 㨠<th>:
td.cellIndexâ<tr>ã§å²ã¾ãã¦ããå å´ã§ã®ã»ã«ã®çªå·ã§ãã
使ç¨ä¾:
<table id="table">
<tr>
<td>one</td><td>two</td>
</tr>
<tr>
<td>three</td><td>four</td>
</tr>
</table>
<script>
// "two" ã® td ãåå¾
let td = table.rows[0].cells[1];
td.style.backgroundColor = "red"; // ãã¤ã©ã¤ã
</script>
仿§: tabular data.
HTMLãã©ã¼ã ã®ããã®è¿½å ã®ããã²ã¼ã·ã§ã³ããããã£ãããã¾ãã ãã©ã¼ã ã使ã£ã¦ä½æ¥ãéå§ããã¨ãã«ããããè¦ã¦ããã¾ãã
ãµããª
ä¸ãããã DOM ãã¼ãã§ãããã²ã¼ã·ã§ã³ããããã£ã使ç¨ãããã¨ã§ç´æ¥é£æ¥ãã¼ãã«ç§»åã§ãã¾ãã
ãããã®2ã¤ã®ä¸»è¦ãªã»ãããããã¾ã:
- ãã¹ã¦ã®ãã¼ããåå¾:
parentNode,childNodes,firstChild,lastChild,previousSibling,nextSibling. - è¦ç´ ãã¼ãã®ã¿ã®åå¾:
parentElement,children,firstElementChild,lastElementChild,previousElementSibling,nextElementSibling
DOM è¦ç´ ã®ããã¤ãã®ç¨®é¡ â e.g. tables â ã¯ãããã®ã³ã³ãã³ãã«ã¢ã¯ã»ã¹ããããã®è¿½å ã®ããããã£ãã³ã¬ã¯ã·ã§ã³ãæä¾ãã¾ãã

ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã