2010-11-25 5 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)'는 무엇을 제공합니까? 이것은 문제가있는 곳입니다. –

+0

.data 내게 ""(비어 있음), 그리고 .data.id 날 "정의되지 않은" –

답변

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 함수가 아닙니다'? –

+0

@Florian이 수정되었습니다. 죄송합니다. –

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

고마워, 정확히 내가 필요한 것 : 반환 태그 (텍스트 노드 f.e.가 아닌). 또한 .children()을 사용하지 않고 nth-child-selector를 사용하면 꽤 좋습니다. –

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 
    } 
} 

킵 당신이 돌아 오기 발전기를 호출.