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é)點的變化會實時反映在集合中