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

老师让用previousSibling和nextSibling 获取到所有兄弟节点.请大神看看我写的哪里错了?

老师让用previousSibling和nextSibling 获取到所有兄弟节点.请大神看看我写的哪里错了?

天天向上学 2018-11-08 20:54:57
function allSibling(ele){         var pre = ele.previousSibling,         nex = ele.nextSibling,         preAry = [],         nexAry = [];         while(pre){             if(pre.nodeType===1){                         preAry.unshift(pre);             }else{                     pre = pre.previousSibling;             }         }         while(nex){                         if(nex.nodeType===1){                                         nexAry.push(nex);                         }else{                                     nex = nex.nextSibling;                         }          }         return preAry.concat(nexAry); }//老师让用previousSibling和nextSibling 获取到所有兄弟节点.请大神看看我写的哪里错了?//
查看完整描述

1 回答

?
聪明的汤姆

TA贡献112条经验 获得超33个赞

两个while都造成了死循环

不管nodeType是否等于1,都需要将当前的pre变成下一个previousSibling,不然会一直在当前pre进行循环,从而导致卡死,将两个while的代码改成如下即可

// 遍历上一个兄弟节点
while (pre) {
  if (pre.nodeType === 1) {
    preAry.unshift(pre);
  }
  pre = pre.previousSibling  
}

// 遍历下一个兄弟节点
while (nex) {
  if (nex.nodeType === 1) {
    nexAry.unshift(nex);
  }
  nex = nex.nextSibling  
}

https://img1.sycdn.imooc.com//5be4e7d80001769403880152.jpg

望采纳!

查看完整回答
反对 回复 2018-11-09
  • 1 回答
  • 0 关注
  • 940 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信