为了账号安全,请及时绑定邮箱和手机立即绑定

关于判断函数的问题

    function get_nextSibling(n){

        var x=n.nextSibling;

        while (x && x.nodeType!=1){

            x=x.nextSibling;

        }

        return x;

    }


    我不太明白,当x已经被赋值了n的nextSibling,经过判断后,为什么还要再一次赋值x=x.previousSibling?

    这样的话,最后一个x的值难道不是已经变成了n的nextSibling的nextSibling了吗?

正在回答

2 回答

第一次x赋值了n的nextSibling,然后你要看判断的是什么。他判断的内容是x不为null,且x的节点类型不为1(即元素节点)的时候,再nextSibling一次。这里主要防止的是:有一些浏览器,会把两个元素标签中间的空格和换行符当成一个文本节点,如果你不做一次过滤,有可能因为浏览器的原因,你的nextSibling节点不是你想要的元素节点,而是一个空白的文本节点。

所以这个判断的功能是,如果n的下一个节点是元素节点,直接返回x。如果不是元素节点(那就是存在文本节点),将这个文本节点过滤掉,即再指向下一个节点,直到找到下一个元素节点

1 回复 有任何疑惑可以回复我~

function get_nextSibling(n){
       var x=n.nextSibling; // 进入函数,首先取得下一个兄弟节点
       while (x && x.nodeType!=1){ // x存在并且x不是元素节点(若不满足,说明直接找到了兄弟节点,那么就直接返回)
           x=x.nextSibling;  // 满足上述条件,进入循环体,再次取x的兄弟节点赋值给x本身
       }
       return x;
   }

0 回复 有任何疑惑可以回复我~
#1

JasonYu_Law 提问者

所以取得兄弟节点的操作就有两次了是吧,那么不就会变成提取下两个节点的操作吗
2016-12-30 回复 有任何疑惑可以回复我~
#2

JasonYu_Law 提问者

噢,我明白了,不是有效节点才再提取一次兄弟节点
2016-12-30 回复 有任何疑惑可以回复我~
#3

qq_____暖_0 回复 JasonYu_Law 提问者

Yes!就是这个意思
2016-12-30 回复 有任何疑惑可以回复我~
#4

JasonYu_Law 提问者 回复 qq_____暖_0

谢谢!
2016-12-30 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468190    人
  • 解答问题       21891    个

本课程从如何插入JS代码开始,带您进入网页动态交互世界

进入课程

关于判断函数的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信