nextSibling和previousSibling中浏览器的兼容问题

在使用nextSibling和previousSibling查找下一个、上一个元素时,会碰到IE和火狐的浏览器兼容问题。

注释:Internet Explorer 会忽略节点间生成的空白文本节点(例如,换行符号),而 Mozilla 不会这样做。

元素节点的节点类型是 1,因此如果首个子节点不是一个元素节点,它就会移至下一个节点,然后继续检查此节点是否为元素节点。整个过程会一直持续到首个元素子节点被找到为止。通过这个方法,我们就可以在 Internet Explorer 和 Mozilla 得到正确的方法。(主要通过检查下一个要查找的元素的nodeType==1);

元素节点的nodeType 1;属性节点的nodeType为2;文本节点的nodeType为3;……

function get_nextsibling(n)
  {
  var x=n.nextSibling;
  while (x.nodeType!=1)
   {
   x=x.nextSibling;
   }
  return x;
  }

实用案例:

html代码

 <ul id="lis">
 	<li>糖醋排骨</li>
    <li>圆笼粉蒸肉</li>
    <li>泡菜鱼</li>
    <li id="myLove">板栗烧鸡</li>
    <li>麻婆豆腐</li>
 </ul>

js脚本:

<script type="text/javascript">
	
	/* function get_nextsibling(n)
	  {
	  var x=n.nextSibling;
	  while (x.nodeType!=1)
	   {
	   x=x.nextSibling;
	   }	
	  return x;
	  }
	function findDom(){
		var love = document.getElementById("myLove");
		var next = love.nextSibling;
		var pre = get_nextsibling(love);
		//alert(next);
		alert(love.childNodes[0].nodeValue+"+/+."+pre.childNodes[0].nodeValue);
		
		
		}
	*/
	function nextSib(node){
		var tempLast = node.parentNode.lastChild;
		if(node == tempLast){
			return null;
			}
		var tempObj = node.nextSibling;
		while(tempObj.nodeType != 1 &&tempObj.nextSibling != null){
			tempObj = tempObj.nextSibling;
			}
		return (tempObj.nodeType==1) ? tempObj:null;
		}
	function preSib(node){
		var tempFirst = node.parentNode.firstChild;
		if(node == tempFirst){
			return null;
			}
		var tempObj = node.previousSibling;
		while(tempObj.nodeType != 1 && tempObj.previousSibling != null){
			tempObj = tempObj.previousSibling;
			}
		return (tempObj.nodeType==1 )? tempObj:null;
		}
	function findDom(){
		var myItem = document.getElementById("myLove");
		var nextListItem = nextSib(myItem);
		var prev = preSib(myItem);
		alert("下一项"+((nextListItem!=null)?nextListItem.firstChild.nodeValue:null)+"前一项"
		+((prev!=null)?prev.firstChild.nodeValue:null));
		}
</script>



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值