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

为什么我这样写页面崩溃了

function get_previousSibling(i){
        var a = i.previousSibling;
        while(a && a.nodeType != 1){
            a= i.previousSibling;
        }
        return a;
    }
    var b = document.getElementsByTagName('li')[1];
    document.write(b.nodeName);
    document.write(' = ');
    document.write(b.innerHTML+'<br>');
    
    var c = get_previousSibling(b);
    if(c!=null){
        document.write(c.nodeName);
        document.write(' = ');
        document.write(c.innerHTML);
    }else{
        document.write('这个是空节点');
    }

我这样写页面崩溃了,我感觉没有啥问题.....看不出来问题,然后我把

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

改成

 while(i && i.nodeType != 1)

就不会崩溃  还可以运行

提问者:qq_Timebegin_0 2018-06-29 16:48

个回答

  • 想转IT的机械狗
    2018-07-14 11:36:42

    第四行:a = i.previousSibling; 改为 :a=a.previousSibiling;

    因为你前面那种写法 如果a是文本的话  就会一直重复这句话而不是说跳过这个节点去判断前一个节点,

  • qq_往事如风_17
    2018-07-02 17:08:06

    while(a && a.nodeType != 1)是排除非元素节点

  • qq_往事如风_17
    2018-07-02 17:05:48

    while循环里面的a= i.previousSibling; 改为 a= a.previousSibling才对,while循环的目的就是寻找过滤非空白节点的,当满足while循环就说明a的previous是空白节点,所以应该再找a的previous的previous