问答详情
源自:9-11 访问兄弟节点

关于javascript进阶篇9-11的个问题

<!DOCTYPE HTML>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>nextSibling</title>

</head>

<body>

<ul id="u1">   

            <li id="a">javascript</li>   

            <li id="b">jquery</li>   

            <li id="c">html</li>   

        </ul>   

        <ul id="u2">   

            <li id="d">css3</li>   

            <li id="e">php</li>   

            <li id="f">java</li>   

        </ul>   

<script type="text/javascript">

    function get_previousSibling(g){

        var x=g.nextSibling;

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

            x=x.nextSibling;

        }

        return x;

    }


    var x=document.getElementById("e");

    document.write(x.nodeName);

    document.write(" = ");

    document.write(x.innerHTML);

    

    var y=get_previousSibling(x);

    

    if(y!=null){

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

        document.write(y.nodeName);

        document.write(" = ");

        document.write(y.innerHTML);

    }else{

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

    }


</script>

</body>

</html>



  1. 为何将while中的x=x.nextSibling中第二 个x改成其他字母,网页崩溃无法运行;

  2. <li>标签不是元素节点吗?如果是,while循环条件中定义的是!=1,意思难道不是x不是元素节点时x=x.nextSibling?那么既然<li>是元素节点,为什么自后还是输出了<li>的Name;

  3. var x=document.getElementById("e")中的X是什么; var y=get_previousSibling(x)中的X是什么,二者给你return X中的X,三者之间有什么联系。

    以上三个问题望大神解答,困扰了一晚上,就差砸电脑了。万分感谢!!!!!!!!

提问者:自律让人自由4008941 2016-11-11 23:51

个回答

  • stone310
    2016-11-12 06:59:55
    已采纳

    1、可以改,但是要将这个函数里的x全部都改,如下改成a

    function get_previousSibling(g){
        var a=g.nextSibling;
        while (a && a.nodeType!=1){
            a=a.nextSibling;
        }
        return a;
    }

    2、li是元素节点,当x不是元素节点并且x存在,说明x是其他节点,例如文本节点,因此x.nextSibling再次判断,直到是元素节点为止

    3、第一个x是定义在全局作用域的变量;第二个x是函数调用时传到函数内部的参数,这里相当于将第一个定义的x传进函数里,代替函数里的g;第三个x,函数内部return x,是指函数局部作用域下的变量x,获取变量优先局部作用域,局部作用域没有再去全局作用域查找

  • qq__2270
    2016-11-20 21:28:06

    while那块这么理解,while循环执行一块代码,直到条件不再被满足,那些不是元素节点的满足条件直接返回。

    那些不满足条件的也就是元素节点的,将执行访问兄弟节点的语句。——本人菜鸟,以上自己见解