指引网

当前位置: 主页 > 网页制作 > JavaScript >

js nextSibling兼容IE和Firefox、Chrome、Opera、Safari浏览器

来源:网络 作者:佚名 点击: 时间:2017-08-07 22:15
[摘要] 今天在做手机网站的时候,使用js nextSibling获取兄弟下的子节点,怎么获取也获取不到,然后上网查一下,说有兼容问题,真蛋疼。
先看这个HTML 代码
<ul>
 <li id="item1" onclick="check()">1<div id="div">1.1</div></li>
 <li id="item2">2</li>
 <li id="item3">3</li>
</ul>

显然,在IE里面,ul的子节点只包含DOM节点,即三个li;但在Firefox里面,ul的子节点却有七个,它包含一个换行,三个文本节点,三个DOM节点li,当我们要用javascript去获取ul 的子节点li时,就有点头痛了。

如上代码,在IE里面,我们可以根据nextSibling从item1那里获取到item2,但在Firefox、Chrome、Opera、Safari里面,获取到的却是object Text。

针对这个问题,可以用document.all来判断,分别解决,因为只有IE才支持document.all。还可以用下面的办法,其实跟document.all差不多

javascript如下

<script type="text/javascript">
function getNextNode(node){
 node=typeof node=="string" ? document.getElementById(node) : node;
 var nextNode=node.nextSibling;
 if(!nextNode) return null;
 if((nextNode.nodeType!=1)&&(nextNode.nextSibling)) nextNode=nextNode.nextSibling;
 return nextNode;
}
function check(){
alert(getNextNode("item1").id);
alert(getNextNode("item2").id);
alert(getNextNode("item3"));
}
</script>

把获取nextSibling的过程用getNextNode()函数封装起来,然后用item1的onclick事件执行check()。

如果还有其他相关的疑问,自己可以改一下代码,看看输出的结果。

------分隔线----------------------------