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 }
望采纳!
添加回答
举报
0/150
提交
取消