老师,为什么我加入 else 页面就崩溃了啊? 我把else删掉就可以运行了

老师,为什么我加入 else 页面就崩溃了啊? 我把else删掉就可以运行了

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕慕子 2021-01-12 19:24:10

同学年后,是指改成如下图所示的写法吗?

http://img1.sycdn.imooc.com//climg/5ffd84d10920c72807620386.jpg

如果不是的话,可以详细指出具体是怎么书写的,如果是这样的话,那么是因为改成上图的格式之后,当上一个兄弟元素的节点类型值为1时,满足if条件,就无法再执行else中的 n = n.previousSibling 这句代码,重新给n赋值,导致n.previousSibling获取的一致都是同一个值,所以会陷入死循环。

如果想要改成if...else的格式,需要在满足if条件后,重新给n赋值,示例:

http://img1.sycdn.imooc.com//climg/5ffd867009ca5f8f08620441.jpg

对比可以发现,视频中老师直接使用if语句实现,代码更加简洁一点,不过同学可以根据自己书写代码的习惯,选择一种方式去实现效果即可。

祝学习愉快~

  • 提问者 慕粉0644535011 #1

    谢谢老师,也就是说if else语句输出的值不能一致是吧,??

    2021-01-12 22:13:15
  • 提问者 慕粉0644535011 #2

    http://img1.sycdn.imooc.com//climg/5ffd867009ca5f8f08620441.jpg

    哦哦 ,老师 是不是把 n.previousSibling赋值给n后  再进行循环  n就已经是下一个兄弟节点进行循环了?

    2021-01-12 22:31:56
  • 提问者 慕粉0644535011 #3

    ?差点就理解错老师的意思了...

    2021-01-12 22:32:52
慕粉0644535011 提问者 2021-01-12 10:30:25

<body>
<div id="box">
<p>段落1</p >
<p>段落1</p >
<p>段落1</p >
<p>段落1</p >
previousSibling
<p id='previous'>段落2</p >
<p>段落3</p >
<p>段落4</p >
</div>
<script>
var box = document.querySelector('#box')
var son = document.getElementById('previous')
var p = document.querySelectorAll('p')
// 获得所有的子元素节点
function getElementChild(node){
var children = [];
for(var i = 0; i < node.childNodes.length; i++){
if(node.childNodes[i].nodeType == 1){
children.push(node.childNodes[i])
}
}
return children
}
//console.log(getElementChild(box))//
//console.log(box)//
//获得前一个兄弟节点
function getPreviousElementSibling(node){
//var n = node;//
while( node .previousSibling != null) {
if(node .previousSibling.nodeType == 1){
return node .previousSibling
} else {
node  = node .previousSibling
}

}
}
//console.log(getPreviousElementSibling(son))//
//console.log(son.previousSibling)//

// 获取所有的兄弟节点
function getElementSibling(node){
// 前面的兄弟节点
var q = [];
//后面的兄弟节点
var h =[];

var n = node;
while( n .previousSibling != undefined) {
if(n .previousSibling.nodeType == 1){
q.unshift(n .previousSibling)
}
n  = n .previousSibling


}
return q
}
console.log(getElementSibling(son))
</script>
</body>

  • 提问者 慕粉0644535011 #1

    就是获取所有兄弟节点那个地方,我还没有写完,就是想不明白为什么写上else就不行了?

    2021-01-12 10:31:54
好帮手慕星星 2021-01-12 10:18:36

同学你好,建议将自己添加上else的代码粘贴上来(不要截图),老师帮助测试,帮助解决问题。

祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师