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

为什么这个代码一提交就卡了

//前一个节点

    function get_previousSibling(n){

        

        var a=n.previousSibling;

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

            a=n.previousSibling;

        }

        return a;

    }

    var a = document.getElementsByTagName("li")[4];

    document.write(a.nodeName);

    document.write(" = ");

    document.write(a.innerHTML);

    

    var b = get_previousSibling(a);

    

    if(b!=null){

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

        document.write(b.nodeName);

        document.write(" = ");

        document.write(b.innerHTML+'<br>');

    }


提问者:成功唯有积累 2016-12-18 19:27

个回答

  • 崔小土
    2016-12-19 14:53:07

    卡了一般都是你代码死循环  导致浏览器崩溃了

    你代码唯一能崩溃的就是 while那里的循环

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

                a=n.previousSibling;

            }

    只要a且a的类型不为1的时候  

    a等于n的上一个节点

    只要满足  只要a且a的类型不为1的时候   这里a就一直等于n的上一个节点

       死循环了


    正确的是

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

                a=a.previousSibling;

            }

    只要满足  只要a且a的类型不为1的时候   这里a就一直等于a的上一个节点

    a就一直向上跳  直到找到类型不为1 或者a不存在的的时候就停止了