1. 程式人生 > >通過節點操作,實現隔行變色效果

通過節點操作,實現隔行變色效果

要點:

1.通過.childNodes獲取的節點,有標籤、文字(包括空文字)、和屬性都要算在內。我們要的只是元素型別為標籤,通過nodeType判斷元素的型別,標籤返回值是1,屬性返回的是2,文字返回的是3

2.通過nodeName返回的節點名字,如果是標籤節點,返回標籤型別的大寫名字如LI(<li>),如果是屬性節點返回的是屬性的小寫,文字節點返回#text

3.通過nodeValue獲取節點的值,如果是標籤節點返回的是null,屬性節點返回屬性值,文字節點返回文字內容

4.因為瀏覽器之間的核心不同,導致獲取節點的方法不一樣,或者使用相同的方法會在不同的瀏覽器執行中,執行不同的效果。所以就要寫出相容程式碼,以後會總結。

 

針對這個案例

通過childNodes獲取到的節點包括空的換行共有17個,而需要執行變色效果的li標籤,只有8個。如果不另外新增一個可以專門表示標籤的索引,剛好全是黃色,因為空白文字的前景色設為了紅色而看不到。

程式碼:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>title</title
</head>
<body>
<input type="button" value="變色" id="btn"/>
<ul id="cool">
  <li>陳小帥</li>
  <li>又變帥了哦</li>
  <li>陳小帥</li>
  <li>又變帥了哦</li>
  <li>陳小帥</li>
  <li>又變帥了哦</li>
  <li>陳小帥</li>
  <li>又變帥了哦</li>
</ul>
<script>
  function my$(id){
    return document.getElementById(id);
  }
  // 封裝程式碼

  my$("btn").onclick = function(){
    var count = 0;
    //節點一共有 17個節點,而li標籤只有8個,如果不加一個計數的變數,
    //如果不加計數剛好本來的紅色變化部分的成了空換行文字的位置,悲劇了

    var nodes = my$("cool").childNodes;
    for(var i=0; i<nodes.length; i++){
      if(nodes[i].nodeType==1 && nodes[i].nodeName=="LI"){ 
        // 通過.nodeName獲取到的節點的名字,標籤名大寫。通過.nodeType獲取到的型別,標籤為1
        nodes[i].style.backgroundColor = count%2 == 0 ?"red" :"yellow";
        // 三元表示式,先將後面的count%2這個三選表示式寫出來,然後再加上前面的
        count++;
        // 每次執行一次顏色改變之後,獲取到下一個li標籤的型別之後,再執行一次判斷
      }
    }
  }
</script>
</body>
</html>

效果: