有幾處代碼不懂 求教~~
<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>已經是最后一個節點"); ? ? ?
? ? }
2015-09-18
第三處。IF可以省略。為了完整性。給上一個IF判斷。如果null即后面沒有元素。就輸出 已經是最后一個節點!。
就當作是為了輸出一個??已經是最后一個節點!。 吧!
2015-09-18
第二處,并不是重復賦值。。而是不太好理解。function中的var僅作用與函數內。所以此X非彼X。。
2015-09-18
?第一處 為什么x的節點類型不為1的元素節點就能作為n的兄弟節點?
? ? 如果不等于1,即是把空白區域算成一個節點了。我們要忽略這個節點。所以它必須等于1,也就是元素節點。這是我們需要的東西。那不等于1呢? 取它后面的一個節點不就行了。 ?那要是等于1,也就是沒有算上空白節點。直接獲取自己后面的下一個節點就行了。
2015-08-08
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;
? ? }
//第三點沒相通,推測是判斷此節點不是最后一個節點,出于瀏覽器兼容問題做出的約束;
初學,如有錯誤抱歉。