原生js取dom节点可能存在的问题

     在用原生的js的dom指针获取dom节点时,可能出现获取不到的情况,如下面这段html

<ol id="list">
   <li>first</li>
   <li>second</li>
</ol>

    如果我们用document.getElementById("list").firstChild会得到什么,是<li>first</li>吗?实际上你会发现它并不是。用document.getElementById("list").firstChild.nodeType可以查看到nodeType为3, nodeType=3表明这是一个文本节点,nodeType=1才是元素节点,nodeType=9则表明文档的根节点(<html>元素)。firstChild为什么是文本节点,因为dom指针不仅可以指向元素,也可以指向文本节点,而XML存在一个有争议的地方:空格。这里ol节点后面存在一个换行符,它被认为是一个空格,所以它是一个文本节点,作为ol下面的第一个节点,firtChild自然就指向了它。这个问题在IE9及其他主流浏览器上都存在,在IE8和IE7上则不会有这个问题。

    为了避免以上的问题,最好使用jquery或dojo等js框架,或者通过判断nodeType来避免选到文本节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值