<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>nextSibling</title>
</head>
<body>
<ul id="u1">
<li id="a">javascript</li>
<li id="b">jquery</li>
<li id="c">html</li>
</ul>
<ul id="u2">
<li id="d">css3</li>
<li id="e">php</li>
<li id="f">java</li>
</ul>
<script type="text/javascript">
function get_nextSibling(n){
var x=n.nextSibling;
while (x && x.nodeType!=1){
x=x.nextSibling;
}
return x;
}
var x=document.getElementsByTagName("li")[0];
document.write(x.nodeName);
document.write(" = ");
document.write(x.innerHTML);
var y=get_nextSibling(x);
if(y!=null){
document.write("<br />nextsibling: ");
document.write(y.nodeName);
document.write(" = ");
document.write(y.innerHTML);
}else{
document.write("<br>已经是最后一个节点");
}
</script>
</body>
</html>
1,为什么我把以下代码中的x改掉其他字母,运行的结果输不出来nextsiling:li=jquery
function get_nextSibling(n){
var x=n.nextSibling;
while (x && x.nodeType!=1){
x=x.nextSibling;
}
return x;
}
2,整个代码中的x都是一样的吗,可不可以详细解释下,谢谢
1. function get_nextSibling中的x只是局部变量,作用于这个function中,出了这个function无效,如果想要把x改成别的,请修改完整,如例子:
function get_nextSibling(n){
var obj=n.nextSibling;
while (obj&& obj.nodeType!=1){
obj=obj.nextSibling;
}
return obj;
}
2.整个代码中的x不是一样的,不过除了function get_nextSibling中的,其他地方的x都是一个值,在function外的x变量是javasript全局变量;
ps:其实按照规范,function中使用了x不应该在下面再使用x作为全局变量名称,应该起另外的变量名字,只是这里因为function先定义了,后再定义全局变量,所以没有出现问题
function get_nextSibling(n){
var z=n.nextSibling;
while (z && z.nodeType!=1){
z=z.nextSibling;
}
return z;
}
可以改呀,把z改为z没有问题呀,但是要注意:
只能改function get_nextSibling(n)这个函数里边的x, 因为 请注意变量的范围,在这个函数里边的x是局部变量,而他和外边的语句 var x=document.getElementsByTagName("li")[0]; document.write(x.nodeName); document.write(" = "); document.write(x.innerHTML); var y=get_nextSibling(x); 里边的x不是同一个x。 总结整个代码的x有两种,一种是function get_nextSibling(n)里边的x,另一种是外边的x;