2010-11-25 65 views
9

如果我有一個父節點,我該如何循環遍歷每個第三個子節點?Javascript:循環遍歷每三個子節點

我現在得到這個代碼:

var parents = document.getElementById('ID_of_parent'); 
var first_child = parents.firstChild.data.id; 
alert(parents); 
alert(first_child); 

對於父母,我得到了現在 '[對象HTMLDivElement]' 和FIRST_CHILD我得到了 '未定義'。

+0

`alert(parents.firstChild.data)`和`alert(parents.firstChild.data.id)`給你帶來了什麼?這是問題所在。 – 2010-11-25 07:41:16

+0

.data給我「」(空),.data.id給我「未定義」 – 2010-11-25 07:43:23

回答

21
var nodes = document.getElementById('ID_of_parent').childNodes; 
for(i=0; i<nodes.length; i+=3) { 
    alert(nodes[i]); 
} 
+0

這將返回'document.getElementById(「ID_of_parent」)。childNodes不是函數'? – 2010-11-25 07:45:24

1

element.childNodes集合是你需要的。 您需要跳過不是元素的子節點(element.nodeType != 1)。

var d = document.getElementById("ID_of_parent"); 
    if (d) 
    { 
     for(var i = 0; i < d.childNodes.length; i++) 
     { 
      if (d.childNodes[i].nodeType == 1) 
       alert(typeof(d.childNodes[i]) + "- " + d.childNodes[i].nodeType + ": " + d.childNodes[i].tagName + " - " + d.childNodes[i].innerHTML); 
     } 
    } 
1

你認爲jQuery?

$("#ID_of_parent > *:nth-child(3n)").each(function() { alert(this);}); 

我在這裏實現了一個演示:http://jsbin.com/ahije4/5

0
function makeSkippingIterator(parent,stride) { 
    if(isNaN(stride) || stride < 1) 
     stride = 1 
    var node = parent.firstChild 
    return function() { 
     var returnable = node, 
      cnt = stride 
     while(--cnt >= 0 && node) { 
      node = node.nextElementSibling 
     } 
     return returnable 
    } 
} 

保持通話,你回來了發電機,直到它有沒有你的價值。