js中的children實時獲取子元素


先看下面一個小例子的結果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        ul,li{list-style:none;}
    </style>
</head>
<body>
<div id="wrap">
    <ul id="list"></ul>
</div>
<script>
    var oList = document.querySelector('#list');
    var lis1 = oList.querySelectorAll('li');
    var lis2 = oList.children;
    console.log(lis1.length);//0
    console.log(lis2.length);//0
    function createLi(){
        for(var i=0; i<10; i++){
            var li = document.createElement('li');
            li.innerHTML = i;
            oList.appendChild(li);
        }
    }
    createLi();
    console.log(lis1.length);//0
    console.log(lis2.length);//10
</script>
</body>
</html>

從上面的結果我們發現,我們發現同樣是一開始就獲取了ul的子列表,但是通過.querySelectorAll獲取的子列表,在創建列表前和創建列表后,長度都為0,而通過.children方法獲取的字列表,在列表創建前,長度為0,而創建之后,長度為10,為什么呢?

使用.children獲取的是元素對象是一個實時更新的列表 可以看做一個數組對象 而使用querySelectorAll獲取的是NodeList 與其他方式獲取的NodeList不同 它不是節點集合 而是元素集合 並且是靜態的 不會實時更新 相當於克隆了一個新數組

所以,我們在使用的時候要注意了哦,如果想要實時獲取列表的變化,可以使用.children,反之,則使用.querySelectorAll(當然也包括getElementsByClassName和getElementsByTagNama)

childNodes也和children一樣是實時獲取元素的字列表(但兩者還是有區別的,這里不再詳細敘說,關於兩者的區別網上有很多啦)
---------------------
原文:https://blog.csdn.net/lhjuejiang/article/details/80615054


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM