今回は、「Node(ノード)」の使い方の中でも、「親子・兄弟関係」について見ていきましょう。
前回の記事で、DOMツリーの説明をした時にノードについて簡単にご説明させて頂きましたが、覚えていらっしゃるでしょうか。
今回の説明の中で親子関係がよくわからない時は、DOMツリーで確認するとどのような構造になっているのかイメージしやすいと思います。
ぜひ合わせてご覧になられてください。
ノードの親子・兄弟関係
DOMでは各ノードが階層構造になっていて、特定のノードから見ると、それぞれが親子関係になっていたり、兄弟関係になっていたりします。
例えば、「head」や「body」は「html」の子になり、逆に「html」は「head」や「body」の親になります。
言葉では少し分かりにくい所もありますので、親子関係や兄弟関係等の取得方法を学習しながら、理解を深めてください。
childNodes
HTML <body> <header> <h1 id="sample">getElementByIdを取得する</h1> </header> <section id="sector1"> <h2 id="fruits">果物</h2> <p>ばなな</p> <p>りんご</p> <p>ぶどう</p> <p>オレンジ</p> <p>いちご</p> </section> <section id="sector2"> <h2>動物</h2> <ul> <li>犬</li> <li>猫</li> <li>鳥</li> <li>パンダ</li> </ul> </section> <script type="text/javascript" src="main.js"></script> </body>
let element = document.getElementById("sector1"); let children = element.childNodes; let leng = children.length; console.log("ノード数:" + leng); for (let i = 0; i < leng; i++) { console.log(children.item(i).nodeName); }
「childNodes」は、指定したノードの一つ下の階層にある子ノードを取得します。
ここでは、「sector1」の子ノードを取得しています。
ノード数:13 #text H2 #text P #text P #text P #text P #text P #text
コンソールに、ノード数が13と表示されています。
しかしコードを見ると、子ノードには、「h2」と「p」が5つの合計6個しかありません。
これは前回の記事でもご説明させて頂きましたが、それぞれのノードの間に空白ノードが含まれているためです。
HTMLのコードの書き方によって空白ノードの数は変わりますので、注意してください。
最初の子ノードと最後の子ノードを取得する
let element = document.getElementById("sector1"); let first = element.firstChild; let last = element.lastChild;
最初の子ノードを取得するには、「firstChild」を、最後の子ノードを取得するには、「lastChild」を記述します。
「childNodes」との関係は以下になります。
element.firstChild; === element.childNodes[0];
element.lastChild === element.childNodes [element.childNodes.length – 1];
兄弟ノードを取得する
同じ階層のノードは兄弟(Siblings)関係にあると言います。
前にあるノードは、「previousSibling」、次にあるノードは、「nextSibling」で取得します。
let previous = element.previousSibling; let next = element.nextSibling;
親ノードを取得する
親ノードを取得するには、「parentNode」で取得します。
let parent = element.parentNode; console.log(parent); body
要素ノードのみ取得する
すべての子要素ノードを取得する
let element = document.getElementById("sector1"); let child = element.children; console.log(child);
「children」を使うと、要素ノードのみ取得することが出来ます。
戻り値は、HTMLコレクションになります。
HTMLCollection(6) 0: h2#fruits 1: p 2: p 3: p 4: p 5: p fruits: h2#fruits length: 6
ノードごとのテキストを返すには、以下のように記述します。
for (let i = 0; i < element.children.length; i++) { console.log(element.children.item(i).textContent); } 果物 ばなな りんご ぶどう オレンジ いちご
その他の要素ノードの指定方法
node.firstElementChild:最初の子要素のノードを取得
node.lastElementChild:最後の子要素のノードを取得
node.previousElementSibling:一つ前にある要素ノードを取得
node.nextElementSibling:次の要素ノードを取得
node.parentElement:親要素のノードを取得
あとがき
親子・兄弟関係について、少しは理解して頂けたでしょうか。
書き方自体は難しくないと思いますので、それぞれのノードの関係性をしっかりと理解しておきましょう。
細かい使い方は、実際のコードで学習していくのが良いと思います。
今回も最後までお読み頂きありがとうございました。