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)
就不会崩溃 还可以运行
第四行:a = i.previousSibling; 改为 :a=a.previousSibiling;
因为你前面那种写法 如果a是文本的话 就会一直重复这句话而不是说跳过这个节点去判断前一个节点,
while(a && a.nodeType != 1)是排除非元素节点
while循环里面的a= i.previousSibling; 改为 a= a.previousSibling才对,while循环的目的就是寻找过滤非空白节点的,当满足while循环就说明a的previous是空白节点,所以应该再找a的previous的previous