2011-12-24 2 views
1

어떻게 DOM에서 요소를 가져 옵니까?jQuery Dom numbers

+0

는 "이 DOM 루트에 대한 요소의 인덱스"무슨 뜻입니까? 좀 더 설명해 주시겠습니까? – kapa

+2

수를 세는 방법을 설명해야합니다. DOM은 순차가 아니라 계층 적입니다. 부모 + 이전 형제 또는 이전 형제 + 부모 + 부모의 이전 형제 + 부모 부모 + 부모 부모의 이전 형제 자매 등을 원하십니까? – jfriend00

+1

이 예제에서 "test"요소의 색인은 무엇입니까? http://jsfiddle.net/jfriend00/LsfQs/ – jfriend00

답변

0

나는 당신이 보편적 인 선택기 *을 찾고있는 것 같아요

//retrieve the index 
$('*').index($('button')); 
    //access the element by index 
$('*:eq('+index+')'); 
+0

이게 내가 뭘 찾고있는 것 같아! DOM에서 많은 노드가있는 더 큰 페이지에서 실행할 수있을만큼 효율적입니까? – Rila

+2

내 생각에 중요한 문제는 인덱스가 요소를 식별하는 좋은 해결책이 아니라는 사실입니다. DOM이 변경 될 수 있습니다. 노드가 삽입되거나 제거 될 때 색인은 다른 요소와 일치합니다. 사용자는 DOM을 독자적으로 변경할 수도 있습니다. Greasemonkey-scripts 또는 이와 유사한 것을 사용하여, 이렇게 할 것을 제안하지 않을 것입니다. –

+0

@Rila 전혀 효율적이지 않습니다. ID 또는 클래스를 사용하십시오. 선택자를 작성하기위한 것입니다. – kapa

0

그냥 고유 다음, DOM의 요소를 식별하고 미래에 다시 같은 DOM 요소에 얻을 수 있도록하려면 요소에 대한 참조를 직접 저장하면됩니다. 문서의 시작 부분부터 계산되는 홀수 선택기를 통해 요소를 가져올 필요가 없습니다. 실제 요소에 대한 참조를 저장할 수 있습니다. 예 :

var lastClickedItem; 

$("div").click(function() { 
    if (lastClickedItem) { 
     $(lastClickedItem).removeClass("clicked"); 
     // do other things to the last clicked item 
    } 
    $(this).addClass("clicked"); 
    lastClickedItem = this; 
}); 

이 코드는 lastClickedItem을 전역 변수에 저장합니다. 그것을 전역 변수에 저장하지 않아도됩니다. 고유 한 ID 또는 클래스 이름을 지정하고이를 사용하여 지정된 요소를 검색 할 수 있습니다. 동일한 요소로 돌아 가기 위해 DOM 앞에서 계산하면 꽤 비효율적 인 것처럼 보입니다.

또는 고유 클래스 이름 사용 :

$("div").click(function() { 
    $(".lastClick").removeClass("lastClick"); 
    $(this).addClass("lastClick"); 
}); 
+0

불행히도 내 유스 케이스가 좀 괴팍하다. 페이지가 다른 시간에 다른 브라우저에로드 될 때 DOM 요소를 식별 할 수 있어야합니다. 그래서 문제는 어떻게 ** 요소 **에 대한 고유 한 참조를 저장할 수 있습니다. 나의 유스 케이스는 요소를 유일하게 찾아서 수정해야하는 A/B 테스트 도구와 비슷하다. 당신의 지속적인 도움을 많이 주셔서 감사합니다! – Rila

+1

나는 포기한다. 우리는 많은 일을하고 있으며, 지금 당신이 정말로하려는 일에 대해서만 설명합니다. 문서를 수정할 수 없으며 요소 참조를 저장할 수 없으면 비효율적 인 메커니즘을 사용하십시오. DOM 변경에 대해 취성이 될 것입니다. 그래도 케이크를 가지고 여기 먹을 수 있다고 생각하지 않습니다. – jfriend00

+0

네 말이 맞아, 나는 더 명확하게 내 의도를 설명 했어야했다. 어쨌든 선생님 께 도움을 주셔서 감사합니다. 매우 감사드립니다. – Rila