查找第1个标签(元素)的previousSibling属性为何固定为如下代码?
在JS进阶教程中有关prevoiusSibling和nextSibling的章节有一段程序如下:
<script type="text/javascript"> // 查找页面中的第1个<li>标签 var firstLi = document.getElementsByTagName("li")[0]; // 编写函数查找上一个sibling标签 function get_previousSibling(node) { var pn = node.previousSibling; // 因为循环条件的原因,导致出现了问题 // 查找的循环条件是“如果上一个sibling类型不是“1” 并且 取值不是null” // 如果将循环条件调整为“while (pn && 1!=pn.type )”则正常 while (1!=pn.type && pn) { pn = pn.previousSibling; } return pn; } var pSibling = get_previousSibling(firstLi); if (pSibling) { document.write("前一个sibling:" + pSibling.innerHTML); } else { document.write("已经是第一个元素了"); } </script>
由运行结果来看,并没有任何输出内容。倒查JS代码,发现问题出在了get_previous()函数中的while循环条件上:
while (1!=pn.type && pn) { }
如果调整为如下形式则能够获取输出:
while (pn && 1!=pn.type) { }
我自己分析,问题可能在于第一个<li>标签之前并没有sibling。pn为第一个<li>标签的前一个sibling,也就是说pn=null。所以循环条件判断时首先判断pn.type会引发问题,而如果首先判断pn!=null则无碍。
请问各位大侠,我的猜测是否有误?请您不吝赐教!