总角晏晏
2015-06-11 19:29
function get_previousSibling(n)
{
var a=n.previousSibling;
while (a&&a.nodeType!=1)
{
a=a.previousSibling;
}
return a;
}
var z=get_previousSibling(x);
if(z!=null){
document.write("<br />previousSibling: ");
document.write(z.nodeName);
document.write(" = ");
document.write(z.innerHTML);
}else{
document.write("<br>已经是第一个节点");
}
这两段是我写的,我发现当在函数中把循环条件改为while (a.nodeType!=1)时程序的执行是不完整的,也就是说必须满足while (a&&a.nodeType!=1)才能正常运行,我是一个初学者,我下面的想法请大神看一下:第一个条件的意思是当a的类型不是1就跳过继续找查上一个元素,但是如果已经是第一个元素,那么条件就成立了,那么就进入了无限循环,函数也不会给一个返回值,那下面这段代码就无法显示,因为函数无法正常调用。而后面这个条件的意思是两个条件同时满足才行,第一个条件a,当已经是第一个元素再向前查找的时候,a这个元素是没有的,那么a的值为假,也就是说条件为假,不执行。直接返回a的值,这个返回值不存在所以a==null,所以输出最后一句话。如果上一个元素存在,则a的值为真,同时满足a.nodeType!=1,所以返回一个不为null的值。可以进行下面的输出命令。但是照这么理解当上一个元素的nodeType为1的时候,也就是空白,那么这个判断依然为假,不会执行循环内容啊。为什么程序是可以执行的呢,我的理解错在哪里,请大神教我。
如果是第一个元素。再取上一个元素,var a=n.previousSibling;这步a得到的是文本nodetype=3,
进入循环后,得到最后一个文本后 a=n.previousSibling;这一步a的值就是null了。a为null进入不了while(a)这个条件,直接return a了。就是return了个null值给我们。
while (a && a.nodeType != 1) 当 a 是 null 时,如你所说,条件为假,退出循环。
while (a.nodeType != 1) 当 a 是 null 时,a.nodeType 会抛异常,程序运行失败。
JavaScript进阶篇
468060 学习 · 21891 问题
相似问题