關于javascript進階篇9-11的個問題
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>nextSibling</title>
</head>
<body>
<ul id="u1"> ??
? ? ? ? ? ? <li id="a">javascript</li> ??
? ? ? ? ? ? <li id="b">jquery</li> ??
? ? ? ? ? ? <li id="c">html</li> ??
? ? ? ? </ul> ??
? ? ? ? <ul id="u2"> ??
? ? ? ? ? ? <li id="d">css3</li> ??
? ? ? ? ? ? <li id="e">php</li> ??
? ? ? ? ? ? <li id="f">java</li> ??
? ? ? ? </ul> ??
<script type="text/javascript">
? ? function get_previousSibling(g){
? ? ? ? var x=g.nextSibling;
? ? ? ? while (x && x.nodeType!=1){
? ? ? ? ? ? x=x.nextSibling;
? ? ? ? }
? ? ? ? return x;
? ? }
? ? var x=document.getElementById("e");
? ? document.write(x.nodeName);
? ? document.write(" = ");
? ? document.write(x.innerHTML);
? ??
? ? var y=get_previousSibling(x);
? ??
? ? if(y!=null){
? ? ? ? document.write("<br />nextsibling: ");
? ? ? ? document.write(y.nodeName);
? ? ? ? document.write(" = ");
? ? ? ? document.write(y.innerHTML);
? ? }else{
? ? ? document.write("<br>已經是最后一個節點"); ? ? ?
? ? }
</script>
</body>
</html>
為何將while中的x=x.nextSibling中第二 個x改成其他字母,網頁崩潰無法運行;
<li>標簽不是元素節點嗎?如果是,while循環條件中定義的是!=1,意思難道不是x不是元素節點時x=x.nextSibling?那么既然<li>是元素節點,為什么自后還是輸出了<li>的Name;
var x=document.getElementById("e")中的X是什么;?var y=get_previousSibling(x)中的X是什么,二者給你return X中的X,三者之間有什么聯系。
????以上三個問題望大神解答,困擾了一晚上,就差砸電腦了。萬分感謝?。。。。。。。?br />
2016-11-12
1、可以改,但是要將這個函數里的x全部都改,如下改成a
2、li是元素節點,當x不是元素節點并且x存在,說明x是其他節點,例如文本節點,因此x.nextSibling再次判斷,直到是元素節點為止
3、第一個x是定義在全局作用域的變量;第二個x是函數調用時傳到函數內部的參數,這里相當于將第一個定義的x傳進函數里,代替函數里的g;第三個x,函數內部return x,是指函數局部作用域下的變量x,獲取變量優先局部作用域,局部作用域沒有再去全局作用域查找
2016-11-20
while那塊這么理解,while循環執行一塊代碼,直到條件不再被滿足,那些不是元素節點的滿足條件直接返回。
那些不滿足條件的也就是元素節點的,將執行訪問兄弟節點的語句。——本人菜鳥,以上自己見解