一文了解JavaScript用Element?Traversal新屬性遍歷子元素
之前遍歷子元素可以用childNodes屬性或者firstChild進(jìn)行遍歷,但是要判斷子元素是否是ELement元素。
后來W3C通過Element Traversal規(guī)定定義了一組新的屬性來進(jìn)行遍歷,就不用判斷了,非常方便。
1、childNodes屬性遍歷
遍歷子元素通常是通過childNodes屬性進(jìn)行遍歷,但是這個(gè)屬性會(huì)包含空白節(jié)點(diǎn),如果只是要遍歷Element元素就特別不方便。
請看如下代碼示例:
<div class="article">
<p>段落一</p>
<p>段落二</p>
<p>段落三</p>
</div>
<script type="text/javascript">
let childList = document.querySelector(".article").childNodes;
console.log(childList);
// 控制臺(tái)輸出:
// NodeList(7) 1
</script>控制臺(tái)查看效果:
遍歷子元素空白節(jié)點(diǎn):

獲取到的子元素包含了空白的text節(jié)點(diǎn),這些節(jié)點(diǎn)就是一些換行、縮進(jìn)、空格等。
如果要遍歷 childList 中p元素,實(shí)務(wù)中也經(jīng)常是這樣,
那么需要判斷子元素為Element類型:
let childList = document.querySelector(".article").childNodes;
// 遍歷子元素
childList.forEach((item, index) => {
if (item.nodeType == 1) { // 判斷是Element類型
console.log(item);
}
});
// 控制臺(tái)輸出:
// 3個(gè)p元素2、Element系列屬性遍歷
Element Traversal為DOM元素添加了5個(gè)屬性:
- 1.
childElementCount子元素的個(gè)數(shù)(nodeType=1)。 - 2.
firstElementChilde指向第一個(gè)Element類型的子元素。 - 3.
lastElementChilde指向最后一個(gè)Element類型的子元素。 - 4.
previousElementSibling指向上一個(gè)同胞Element類型的元素。 - 5.
nextElementSibling指向下一個(gè)同胞Element類型的元素。
通過這些新屬性,遍歷Element元素起來就方便多了,
還是以上面為例:
// 獲取第一個(gè)元素
let currentElement = document.querySelector(".article").firstElementChild;
// 遍歷子元素
while (currentElement) {
console.log(currentElement);
// 獲取下一個(gè)元素
currentElement = currentElement.nextElementSibling;
}這樣處理起來就更加簡潔了。
目前IE9及以上版本,以及所有現(xiàn)代瀏覽器都支持這些屬性。
到此這篇關(guān)于一文了解JavaScript用Element Traversal新屬性遍歷子元素的文章就介紹到這了,更多相關(guān) 淺談JavaScript用Element Traversal新屬性遍歷子元素內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS前端錯(cuò)誤監(jiān)控捕獲以及上報(bào)方法詳解
這篇文章主要為大家介紹了前端錯(cuò)誤監(jiān)控捕獲以及上報(bào)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
mitt tiny-emitter發(fā)布訂閱應(yīng)用場景源碼解析
這篇文章主要為大家介紹了mitt tiny-emitter發(fā)布訂閱應(yīng)用場景源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Babel?插件開發(fā)&訪問節(jié)點(diǎn)實(shí)例詳解
這篇文章主要為答案及介紹了Babel?插件開發(fā)&訪問節(jié)點(diǎn)實(shí)例詳解,整理一下?Babel?插件開發(fā)時(shí)用得到的轉(zhuǎn)換操作相關(guān)的?API,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
js?交互在Flutter?中使用?webview_flutter
這篇文章主要為大家介紹了js?交互在Flutter?中使用?webview_flutter示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02

