查找第1個標簽(元素)的previousSibling屬性為何固定為如下代碼?
在JS進階教程中有關prevoiusSibling和nextSibling的章節(jié)有一段程序如下:
<script?type="text/javascript"> ????//?查找頁面中的第1個<li>標簽 ????var?firstLi?=?document.getElementsByTagName("li")[0]; ???? ????//?編寫函數(shù)查找上一個sibling標簽 ????function?get_previousSibling(node)?{ ????????var?pn?=?node.previousSibling; ????????//?因為循環(huán)條件的原因,導致出現(xiàn)了問題 ????????//?查找的循環(huán)條件是“如果上一個sibling類型不是“1”?并且?取值不是null” ????????//?如果將循環(huán)條件調整為“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("已經(jīng)是第一個元素了"); ????} </script>
由運行結果來看,并沒有任何輸出內容。倒查JS代碼,發(fā)現(xiàn)問題出在了get_previous()函數(shù)中的while循環(huán)條件上:
while?(1!=pn.type?&&?pn)?{ }
如果調整為如下形式則能夠獲取輸出:
while?(pn?&&?1!=pn.type)?{ }
我自己分析,問題可能在于第一個<li>標簽之前并沒有sibling。pn為第一個<li>標簽的前一個sibling,也就是說pn=null。所以循環(huán)條件判斷時首先判斷pn.type會引發(fā)問題,而如果首先判斷pn!=null則無礙。
請問各位大俠,我的猜測是否有誤?請您不吝賜教!
2019-08-19
沒錯,如果pn不存在,則其為undefined,就不存在type屬性,會報錯
2019-08-19
剛才打錯了,是null,不是undefined?