搞懂children和childNodes

children(HTMLCollection)

children返回的是一個元素的子元素,只包括元素節(jié)點,不包含文本節(jié)點、注釋節(jié)點

    <script>
    window.onload = function(){
        var oUl = document.getElementsByTagName('ul')[0];
        console.log(oUl.children.length) // 2
    }
    </script>
    <body>
        <ul> i am text node
            <li></li> i am text node too
            <li></li><!--this is note-->
        </ul>
    </body>

childNodes (Nodelist)

childNodes返回的是所有子節(jié)點的一個集合,包括元素節(jié)點、文本節(jié)點、注釋節(jié)點(如果一段文本被一個注釋所分開,那么這里就有三個節(jié)點:文本節(jié)點、注釋節(jié)點、文本節(jié)點)

    <script>
    window.onload = function(){
        var oUl = document.getElementsByTagName('ul')[0];
        console.log(oUl.childNodes.length) // 2
    }
    </script>
    <body>
        <ul> i am text node
            <li></li> i am text node too
            <li></li><!--this is note-->
        </ul>
    </body>

補充

關(guān)于nodeType:

元素節(jié)點:nodeType === 1
屬性節(jié)點:nodeType === 2
文本節(jié)點:nodeType === 3
注釋節(jié)點:nodeType === 8
文檔節(jié)點(document):nodeType === 9

關(guān)于HTMLCollection和NodeList:

主要區(qū)別是,NodeList可以包含各種類型的節(jié)點,HTMLCollection只能包含 HTML 元素節(jié)點。

NodeList

NodeList的成員可以是任意類型的節(jié)點

NodeList可以是動態(tài)的(element.childNodes)也可以是靜態(tài)的(document.querySeletorAll())

所謂動態(tài)指的是這個集合是動態(tài)的,如果動態(tài)添加子元素,那么這個集合也會發(fā)生變化

NodeList有l(wèi)ength,forEach方法,keys(),values()等,是一個類數(shù)組

HTMLCollection

HTMLCollection是一個節(jié)點對象的集合,只能包含元素節(jié)點(element),不能包含其他類型的節(jié)點。它的返回值是一個類似數(shù)組的對象,但是與NodeList接口不同,HTMLCollection沒有forEach方法,只能使用for循環(huán)遍歷。

返回HTMLCollection實例的,主要是一些Document對象的集合屬性,比如document.links、document.forms、document.images等。

以及document.getElementsByTagName(),document.getElementsByClassName(),element.children()等

HTMLCollection實例都是動態(tài)集合,節(jié)點的變化會實時反映在集合中

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容