把第一段返回节点之后的节点的代码var x=document.getElementsByTagName("li")[0]; 中的[0]改为[5],则打印出“已是最后一行,”和“已是第一行”。但把第二段返回节点之前的代码var h=document.getElementsByTagName("li")[5]; 中的[5]改为[0]则不会提示,而是返回值有些改变。不知是为什么?
不太明白你说的意思。
var x=document.getElementsByTagName("li")[0];找出第一个li,改成(5)则找第6个li。
你说的打印’已是最后一行‘和’已是第一行‘,具体代码什么。
首先,得看下你做的例子,一般来说,数据组的下标值不能超过li的个数,如果超过,则返回null;
比如<li>1</li><li>2</li>,如果document.getElementsByTagName("li")[下标];如果小标大于等于2,则返回值为空。
具体你可以看看previousSibling和nextSibling的用法
给你看下源代码就明白了。
<!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;
}
function get_previousSibling(p){
var h = p.previousSibling;
while(h && h.nodeType!=1){
h = h.previousSibling;
}
return h;
}
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>已经是最后一个节点");
}
var h = document.getElementsByTagName("li")[5];
document.write("<br />" + "<br />" + h.nodeName);
document.write(" = ");
document.write(h.innerHTML);
var i = get_previousSibling(h);
if (y!=null){
document.write("<br />previousSibling:");
document.write(i.nodeName);
document.write("=");
document.write(i.innerHTML);
}else{
document.write("<br />已经是第一个节点");
}
</script>
</body>
</html>