正在回答 回答被采纳积分+1
同学年后,是指改成如下图所示的写法吗?
如果不是的话,可以详细指出具体是怎么书写的,如果是这样的话,那么是因为改成上图的格式之后,当上一个兄弟元素的节点类型值为1时,满足if条件,就无法再执行else中的 n = n.previousSibling 这句代码,重新给n赋值,导致n.previousSibling获取的一致都是同一个值,所以会陷入死循环。
如果想要改成if...else的格式,需要在满足if条件后,重新给n赋值,示例:
对比可以发现,视频中老师直接使用if语句实现,代码更加简洁一点,不过同学可以根据自己书写代码的习惯,选择一种方式去实现效果即可。
祝学习愉快~
<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>
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星