慕慕0159803
2018-05-21 21:44
<script type="text/javascript">
function get_previousSibling(n){
var y=n.previousSibling;
document.write(y.nodeType);
while (y && y.nodeType!=1){
y=y.previousSibling;
document.write(y.nodeType);
}
return y;
}
var x=document.getElementsByTagName("li")[0];
//document.write(x.nodeName);
//document.write(" = ");
//document.write(x.innerHTML);
var y=get_previousSibling(x);
if(y!=null){
document.write("<br />nextsibling: ");
document.write(y.nodeName);
document.write(" = ");
document.write(y.innerHTML);
}else{
document.write("<br>已经是第一个节点");
}
</script>
为啥没执行“这是第一个元素”的输出?
function get_previousSibling(n){
var y=n.previousSibling;//这里获取是前面的空格
document.write(y.nodeType);//所以这个会打印一个3
while (y && y.nodeType!=1){
y=y.previousSibling;//在获取空格前边的节点,已经没有了,会返回null
document.write(y.nodeType);//所以这里便是null,已经不是节点了 所以不存在节点类型的,
}
return y;//等于y是null 所以下边结果是已经是第一个节点了
}
console.log(y); 没看懂呢
但是我发现:我加的这 document.write(y.nodeType); 一行打印y类型的语句,没有运行;另外把这句注释里就正常了哎,什么情况呢?
报错了?
while (y && y.nodeType!=1){ y=y.previousSibling; console.log(y); // 加上这行看看这个y是什么 document.write(y.nodeType); }
如果你的li前面已经没有元素了,应该会报错才对。第一个li的previousSibling是#text,#text的previousSibling是null,null.nodeType自然就报错了。
知道问题原因了,解决办法就自己想想吧~
JavaScript进阶篇
468061 学习 · 21891 问题
相似问题