JavaScript中的子節(jié)點(diǎn),就是指DOM節(jié)點(diǎn)的一個(gè)重要屬性。子節(jié)點(diǎn)就是指某個(gè)父節(jié)點(diǎn)下的所有直接子元素。通俗的說,如果將網(wǎng)頁的結(jié)構(gòu)比作一顆樹,那么就是父節(jié)點(diǎn)的所有兒子節(jié)點(diǎn)。JavaScript中的子節(jié)點(diǎn)可以用來選擇、遍歷或修改樹中的節(jié)點(diǎn)。下面就來詳細(xì)解析一下JavaScript中子節(jié)點(diǎn)的用法。
在JavaScript中獲取一個(gè)節(jié)點(diǎn)的子元素非常簡單,只需要使用childNodes屬性即可。childNodes返回的是一個(gè)元素節(jié)點(diǎn)列表。我們可以選擇其中的特定元素來操作,比如修改、刪除等。下面是一個(gè)例子,我們使用childNodes屬性獲取列表中第二個(gè)子元素的內(nèi)容:
<div id="myDiv"> <p>Hello world!</p> <p>This is a paragraph.</p> <ul> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> </ul> </div> <script> var myDiv = document.getElementById("myDiv"); var secondChild = myDiv.childNodes[1]; // 獲取第二個(gè)子元素,即第二個(gè)p標(biāo)簽元素 console.log(secondChild.innerHTML); // 輸出"This is a paragraph." </script>如果我們想要選擇所有的元素節(jié)點(diǎn),而不是文本節(jié)點(diǎn),可以使用children屬性。children屬性返回的是一個(gè)HTMLCollection對象,包含子元素中的所有元素節(jié)點(diǎn)。如下面的例子,我們通過children屬性找出div元素下的所有子元素。
<div id="myDiv"> <p>Hello world!</p> <p>This is a paragraph.</p> <ul> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> </ul> </div> <script> var myDiv = document.getElementById("myDiv"); var children = myDiv.children; for(var i = 0; i < children.length; i++){ console.log(children[i].nodeName); } </script>在上面的代碼中,我們使用了for循環(huán)遍歷了div元素中的所有子元素。nodeName屬性表示節(jié)點(diǎn)的名稱,比如p標(biāo)簽的nodeName為"p",ul標(biāo)簽的nodeName為"ul"等等。 有時(shí)候,我們可能會只想要選擇元素間的文本節(jié)點(diǎn),而不需要元素節(jié)點(diǎn)。這時(shí)候,我們可以使用textContent屬性,它可以獲取元素內(nèi)的所有文本節(jié)點(diǎn)。下面是一個(gè)例子,通過textContent屬性獲取所有文本節(jié)點(diǎn)。
<div id="myDiv"> <p>Hello world!</p> <p>This is a paragraph.</p> <ul> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> </ul> </div> <script> var myDiv = document.getElementById("myDiv"); console.log(myDiv.textContent); </script>代碼輸出的結(jié)果是 "Hello world!This is a paragraph.List item 1List item 2List item 3",它是所有文本節(jié)點(diǎn)的字符串拼接。 在此,有一點(diǎn)需要注意:childNodes和children屬性只返回元素節(jié)點(diǎn),不返回文本節(jié)點(diǎn)。如果我們需要選擇文本節(jié)點(diǎn),則必須使用textContent屬性或者遍歷列表中的所有節(jié)點(diǎn)來判斷。有時(shí)候,即使是文本節(jié)點(diǎn)也有可能有空格和回車等不必要的字符,如下面這個(gè)例子:
<div id="myDiv"> This is some text. <p>Hello world!</p> <p>This is a paragraph.</p> <ul> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> </ul> </div> <script> var myDiv = document.getElementById("myDiv"); var children = myDiv.childNodes; var count = 0; for(var i = 0; i < children.length; i++){ if (children[i].nodeType == 3 && !/^\s+$/.test(children[i].nodeValue)) { count++; } } console.log(count); </script>在上面的代碼中,我們使用了正則表達(dá)式來檢查文本節(jié)點(diǎn)是否為空。nodeType屬性值為3表示一個(gè)文本節(jié)點(diǎn),而/^\s+$/是用來檢測一個(gè)字符串是否全部由空格和換行符組成的正則表達(dá)式。如果沒有全部由空格和換行符組成,就將計(jì)數(shù)器加1。 以上就是JavaScript中子節(jié)點(diǎn)的使用介紹。使用這些簡單的屬性可以輕松地選擇、遍歷或修改樹中的節(jié)點(diǎn)。希望通過本文的介紹,讀者們能夠更加熟練地掌握J(rèn)avaScript中子節(jié)點(diǎn)的用法。