DOM之子节点

说明单独将子节点这一节单独拿出来记录的原因:在学习和实际开发中,发现了一些问题,为避免遗忘或在以后开发中造成疑惑,故将这一块单独记录。

1.childNodes

childNodes 是一个只读的类数组对象( NodeList 对象),它是某一个节点的子节点的实时表示。

需要注意的是,这里面有一些坑。

<body><ul><li></li><li></li></ul></body>

对这个 html 片段, 使用 childNodes 得到 ul 的子节点的个数为2,但是在下面这个html片段中,

   <body>
   		<ul>
   			<li></li>
   			<li></li>
   		</ul>
   	</body>

IE 6 - IE 8 得到的子节点个数为 2 ,而 IE 高版本浏览器及其它浏览器中会得到子节点个数为5,因为这些浏览器将html片段里面的空格当成了文本节点

为避免在使用时出错,所以一般 childNodes 与 noteType 一起使用。

2. nodeType

nodeType表示一个节点的类型。


  • 9 Document节点
  • 1 Element节点
  • 3 Text节点
  • 8 Comment节点
  • 11 DocumentFragmet节点

在使用 childNodes 时,为避免选错元素,一般两个一起使用,如

var oUl =  document.getElementsByTagName('ul')[0];
var aLi = oUl.childNodes;
for(var i= 0; i < aLi.length; i++){
	if(aLi[i].nodeType == 1){
	 		......
	}
	else{
			......
	}
}

3. firstChild 、lastChild

表示某一个节点的第一个和最后一个子节点,当这一个节点没有子节点时返回null。

这两个属性与childNodes属性有一样的问题,所以使用时也应当小心,最好也是跟nodeType一起使用。

4. firstElementChild 、lastElementChild

可以使用这个代替firstChild 、lastChild,这样就不会将文本节点参杂进来。但是需要注意的是,这俩方法不兼容低版本IE

5. children

Text和Coment节点没有children属性,所以children属性只包含Element对象,所以可以使用它来代替childNodes,并且可以轻易的避免不必要节点的混入。

但是目前主流开发中,貌似很少看到有使用children属性,不知道是不是有什么问题还是大家都不习惯使用,可能本人信息比较落后而已哈。

6. 其它

本文所述均假设 开发过程只需要使用Element节点,当有情况于此相悖时,可适当甄别或做其它参考,详细参考可见 https://www.w3.org/TR/ElementTraversal/

参考文献

【1】 《JavaScript权威指南第六版》
【2】 https://www.w3.org/TR/ElementTraversal/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值