<script type="text/javascript">
function get_nextSibling(n){
var x=n.nextSibling;
while (x && x.nodeType!=1){ // 第一处 为什么x的节点类型不为1的元素节点就能作为n的兄弟节点
x=x.nextSibling;// 第二处 x不是已经定义为n的下个节点了么,为什么又要重新赋值一次,重新赋值后的x不就是n的下下一个节点了么
}
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){ //上面不是已经在(x && x.nodeType!=1)约束了n的下一个节点要存在么 为什么又要重新约束一次?
document.write("<br />nextsibling: ");
document.write(y.nodeName);
document.write(" = ");
document.write(y.innerHTML);
}else{
document.write("<br>已经是最后一个节点");
}
第三处。IF可以省略。为了完整性。给上一个IF判断。如果null即后面没有元素。就输出 已经是最后一个节点!。
就当作是为了输出一个 已经是最后一个节点!。 吧!
第二处,并不是重复赋值。。而是不太好理解。function中的var仅作用与函数内。所以此X非彼X。。
第一处 为什么x的节点类型不为1的元素节点就能作为n的兄弟节点
如果不等于1,即是把空白区域算成一个节点了。我们要忽略这个节点。所以它必须等于1,也就是元素节点。这是我们需要的东西。那不等于1呢? 取它后面的一个节点不就行了。 那要是等于1,也就是没有算上空白节点。直接获取自己后面的下一个节点就行了。
function get_nextSibling(n){
var x=n.nextSibling;
while (x && x.nodeType!=1){ // 第一处 为什么x的节点类型不为1的元素节点就能作为n的兄弟节点
//此处判断为X节点类型不为1时的节点不能作为N的兄弟节点,进而运行后面的X=X.nextSibling;去循环下一个节点能否作为N的兄弟节点,如果为1的话就不会运行while里的程序,直接去运行 return x 了;
x=x.nextSibling;// 第二处 x不是已经定义为n的下个节点了么,为什么又要重新赋值一次,重新赋值后的x不就是n的下下一个节点了么
// 即上提及的循环下一个节点;
}
return x;
}
//第三点没相通,推测是判断此节点不是最后一个节点,出于浏览器兼容问题做出的约束;
初学,如有错误抱歉。