1. 程式人生 > >替換節點

替換節點

屬性 else image var tel 遊戲 手動 targe fun

1.單點替換程序

  這種效果可以看出,雖然被替換了,但是下面節點也沒移動了。

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>Insert title here</title>
 6 <script type="text/javascript">
 7     window.onload=function(){
 8         var bjNode=document.getElementById("bj
"); 9 var rlNode=document.getElementById("rl"); 10 var cityNode=document.getElementById("city"); 11 alert(1); 12 cityNode.replaceChild(rlNode,bjNode); 13 } 14 </script> 15 </head> 16 <body> 17 <p>你喜歡哪個城市?</p> 18 <ul id="city">
19 <li id="bj" name="BeiJing">北京</li> 20 <li>上海</li> 21 <li>東京</li> 22 <li>首爾</li> 23 </ul><br><br> 24 25 <p>你喜歡哪款單機遊戲?</p> 26 <ul id="game"> 27 <li id="rl">紅警</
li> 28 <li>實況</li> 29 <li>極品飛車</li> 30 <li>魔獸</li> 31 </ul><br><br> 32 </body> 33 </html>

2.運行效果

  技術分享

  技術分享

3.節點互換

  這種方式需要函數cloneNode(true)

4.程序

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>Insert title here</title>
 6 <script type="text/javascript">
 7     window.onload=function(){
 8         var bjNode=document.getElementById("bj");
 9         var rlNode=document.getElementById("rl");
10         var cityNode=document.getElementById("city");
11         var gameNode=document.getElementById("game");
12         alert(1);
13         var bjNode2=bjNode.cloneNode(true);
14         //順序不許弄反
15         gameNode.replaceChild(bjNode2,rlNode);
16         cityNode.replaceChild(rlNode,bjNode);
17         
18     }
19 </script>
20 </head>
21 <body>
22     <p>你喜歡哪個城市?</p>
23     <ul id="city">
24         <li id="bj" name="BeiJing">北京</li>
25         <li>上海</li>
26         <li>東京</li>
27         <li>首爾</li>
28     </ul><br><br>
29     
30     <p>你喜歡哪款單機遊戲?</p>
31     <ul id="game">
32         <li id="rl">紅警</li>
33         <li>實況</li>
34         <li>極品飛車</li>
35         <li>魔獸</li>
36     </ul><br><br>
37 </body>
38 </html>

5.運行結果

  技術分享

6.自定義互換函數

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    window.onload=function(){
        var bjNode=document.getElementById("bj");
        var rlNode=document.getElementById("rl");
        var cityNode=document.getElementById("city");
        var gameNode=document.getElementById("game");
        alert(1);
        replaceEach(bjNode,rlNode);
    }
    //自定義互換兩個節點的函數
    function replaceEach(aNode, bNode){
        //1. 獲取 aNode 和 bNode 的父節點. 使用 parentNode 屬性
        var aParent = aNode.parentNode;
        var bParent = bNode.parentNode;
        
        if(aParent && bParent){
            //2. 克隆 aNode 或 bNode
            var aNode2 = aNode.cloneNode(true);
            
            //3. 分別調用 aNode 的父節點和 bNode 的父節點的 replaceChild()
            //方法實現節點的互換
            bParent.replaceChild(aNode2, bNode);
            aParent.replaceChild(bNode, aNode);
        }
    }
</script>
</head>
<body>
    <p>你喜歡哪個城市?</p>
    <ul id="city">
        <li id="bj" name="BeiJing">北京</li>
        <li>上海</li>
        <li>東京</li>
        <li>首爾</li>
    </ul><br><br>
    
    <p>你喜歡哪款單機遊戲?</p>
    <ul id="game">
        <li id="rl">紅警</li>
        <li>實況</li>
        <li>極品飛車</li>
        <li>魔獸</li>
    </ul><br><br>
</body>
</html>

7.效果

  技術分享

8.對應節點的互換,並且可以多次互換

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>Insert title here</title>
 6 <script type="text/javascript">
 7     window.onload=function(){
 8         var liNodes = document.getElementsByTagName("li");    
 9         //2. 為每一個 li 節點添加 Onclick 響應函數
10         for(var i = 0; i < liNodes.length; i++){
11             //手動為每個 li 節點添加一個 index 屬性
12             liNodes[i].index = i;
13             liNodes[i].onclick = function(){                
14                 //3. 找到和當前節點對應的那個 li 節點
15                 var targetIndex = 0;        
16                 if(this.index < 4){
17                     targetIndex = 4 + this.index;
18                 }else{
19                     targetIndex = this.index - 4;
20                 }    
21                 //交換 index 屬性,這個是重點,每次替換時也將index一起互換
22                 var tempIndex = this.index;
23                 this.index = liNodes[targetIndex].index;
24                 liNodes[targetIndex].index = tempIndex;
25                 
26                 //4. 互換. 
27                 replaceEach(this, liNodes[targetIndex]);            
28             }
29         }
30         
31     }
32     //自定義互換兩個節點的函數
33     function replaceEach(aNode, bNode){
34         //1. 獲取 aNode 和 bNode 的父節點. 使用 parentNode 屬性
35         var aParent = aNode.parentNode;
36         var bParent = bNode.parentNode;
37         
38         if(aParent && bParent){
39             //2. 克隆 aNode 或 bNode
40             var aNode2 = aNode.cloneNode(true);
41             
42             //3. 分別調用 aNode 的父節點和 bNode 的父節點的 replaceChild()
43             //方法實現節點的互換
44             bParent.replaceChild(aNode2, bNode);
45             aParent.replaceChild(bNode, aNode);
46         }
47     }
48 </script>
49 </head>
50 <body>
51     <p>你喜歡哪個城市?</p>
52     <ul id="city">
53         <li id="bj" name="BeiJing">北京</li>
54         <li>上海</li>
55         <li>東京</li>
56         <li>首爾</li>
57     </ul><br><br>
58     
59     <p>你喜歡哪款單機遊戲?</p>
60     <ul id="game">
61         <li id="rl">紅警</li>
62         <li>實況</li>
63         <li>極品飛車</li>
64         <li>魔獸</li>
65     </ul><br><br>
66 </body>
67 </html>

9.運行結果

  技術分享

  技術分享

替換節點