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

有几处代码不懂 求教~~

<script type="text/javascript">

    function get_nextSibling(n){

        var x=n.nextSibling;

        while (x && x.nodeType!=1){ // 第一处 为什么x的节点类型不为1的元素节点就能作为n的兄弟节点 

            x=x.nextSibling;// 第二处 x不是已经定义为n的下个节点了么,为什么又要重新赋值一次,重新赋值后的x不就是n的下下一个节点了么

        }

        return x;

    }


    var x=document.getElementsByTagName("li")[0];

    document.write(x.nodeName);

    document.write(" = ");

    document.write(x.innerHTML);

    

    var y=get_nextSibling(x);

    

    if(y!=null){  //上面不是已经在(x && x.nodeType!=1)约束了n的下一个节点要存在么 为什么又要重新约束一次?

        document.write("<br />nextsibling: ");

        document.write(y.nodeName);

        document.write(" = ");

        document.write(y.innerHTML);

    }else{

      document.write("<br>已经是最后一个节点");      

    }


正在回答

4 回答

第三处。IF可以省略。为了完整性。给上一个IF判断。如果null即后面没有元素。就输出 已经是最后一个节点!。

就当作是为了输出一个  已经是最后一个节点!。 吧!

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

第二处,并不是重复赋值。。而是不太好理解。function中的var仅作用与函数内。所以此X非彼X。。

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

 第一处 为什么x的节点类型不为1的元素节点就能作为n的兄弟节点 

    如果不等于1,即是把空白区域算成一个节点了。我们要忽略这个节点。所以它必须等于1,也就是元素节点。这是我们需要的东西。那不等于1呢? 取它后面的一个节点不就行了。  那要是等于1,也就是没有算上空白节点。直接获取自己后面的下一个节点就行了。

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

function get_nextSibling(n){

        var x=n.nextSibling;

        while (x && x.nodeType!=1){ // 第一处 为什么x的节点类型不为1的元素节点就能作为n的兄弟节点 

//此处判断为X节点类型不为1时的节点不能作为N的兄弟节点,进而运行后面的X=X.nextSibling;去循环下一个节点能否作为N的兄弟节点,如果为1的话就不会运行while里的程序,直接去运行 return x 了;

            x=x.nextSibling;// 第二处 x不是已经定义为n的下个节点了么,为什么又要重新赋值一次,重新赋值后的x不就是n的下下一个节点了么

        //    即上提及的循环下一个节点;

        }

        return x;

    }

//第三点没相通,推测是判断此节点不是最后一个节点,出于浏览器兼容问题做出的约束;

初学,如有错误抱歉。


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

叛逆春 提问者

你这是完全忽略我问的问题 自己解释啊 亲...
2015-08-10 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

有几处代码不懂 求教~~

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