2013-02-14 4 views
0

table.rows와 비슷한 기능을하는 순차 목록을 반복 할 수있는 방법이 있습니까? 자바 스크립트를 사용하고 있습니다.Javascript의 순서 목록 반복

이유는 내가 다른 주문 목록이 들어있는 순서가있는 목록이 있기 때문입니다. 난 그냥 부모 목록 항목을 반환하고 아이가 아닙니다.

<ol id="pList"> 
    <li>Item A</li> 
    <li> 
     <ol id="cList"> 
      <li>A's Child 1</li> 
      <li>A's Child 2</li> 
     </ol> 
    </li> 
    <li>Item B</li> 
    <li>Item C</li> 
    <li>Item D</li> 
</ol> 

이제 getElementsbyTag를 사용하여 모든 li의 결과를 cList에 반환합니다. 난 그냥 pList에있는 것들을 원해.

감사합니다.

FYI : 나는 자바 스크립트로 작업하는 것을 선호합니다. 코드는 Greasemonkey 내에서 작동해야합니다. 나는 jquery에 대해 많이 알지 못한다. 그리고 나는 자바 스크립트 프로그래머가별로 아니다.

+0

바닐라 자바 ​​스크립트 만 요구하거나 jQuery를 사용할 수 있습니까? – Sunyatasattva

+0

당신은 '일반'자바 스크립트를 원하거나 jquery를 사용할 수 있습니까? – pbaris

+7

재미있게 그냥 * 태그가 붙지 않은 질문 * [tag : jquery]가 jQuery 응답을 원하지 않는다고 가정 해 봅시다. –

답변

4

<ol><li> 명의 자식에게 직접 액세스 할 수있는 속성은 없습니다 (예 : specific).

그러나 특히 <ol>의 유효한 아동은 공백 텍스트 노드와 <li> 노드 여야한다고 생각할 때 매우 쉽게 열거 할 수 있습니다.

var ol = document.getElementById('pList'); 
var li = []; 
var node = ol.firstChild; 
while (node) { 
    if (node.tagType === 3 && node.tagName === 'LI') { 
     li.push(node); 
    } 
    node = node.nextSibling; 
} 

마지막으로 배열 li에는 필수 하위 항목이 포함되어 있습니다.

위의 코드가 모든 브라우저에서 동작합니다. .children 컬렉션은 이전 버전의 MSIE에서 문제가 있으며 querySelectorAll은 훨씬 최신 버전이므로 덜 광범위하게 지원됩니다.

document.getElementById('pList').children 

당신도 그것을 통해 반복하고 무엇이든지 당신의 필요 확인할 수 있습니다 : 직접적인 아이의 테이블은 모든 자바 스크립트 객체에있다

+0

'var li = document.getElementById ('pList'). children;' – jantimon

+0

@Ghommey'.children'은 이전 버전의 MSIE에서 "이상한"동작을합니다. http://stackoverflow.com/questions/7935689/what-is-the-difference-between-children-and-childnodes-in-javascript – Alnitak

+0

및 .childNodes?를 참조하십시오. 또는 우리는 여기서 똑같은 것을 말하는 것입니까? –

0

querySelectorAll()를 사용하는 경우

var el = document.getElementById('pList'); 
for (var i = 0; i < el.children.length; i++) { 
    if (el.children[i].tagName == "LI") { 
     el.children[i].doWhatever(); 
    } 
} 
+2

http://stackoverflow.com/questions/7935689/what-is-the-difference-between-children-and-childnodes-in-javascript – Alnitak

+0

호환성 문제를 지적했습니다. 감사합니다! –

+0

table.rows와 같은 직접 액세스가 있었으면합니다. 그래서 나는 옛날 방식으로 할 것이라고 생각합니다. – C3PO

1

는 * 당신을위한 옵션입니다 , 쉽습니다 :

var listItems = document.querySelectorAll('#pList > li'); 

* 참고 : 그것은 na입니다. DOM 메서드를 사용하면 jQuery와 아무런 관련이 없습니다.

+0

+1 빠르며 읽기 좋습니다. – jantimon

+0

니스. 이 경우에는 OL이 항상 ID를 갖지는 않으므로 다음에 사용합니다. 감사 – C3PO