2011-07-05 2 views
13

는이 전 (포인트 나)와 같은 구조를 가지고 JQuery와 객체가 있다고 가정 해 봅시다 이 같은 :JQuery와, 자녀와 손자를 검색

['parent', 'child1', 'child2', ..., 'grandchild1', ...] 

감사

PS 그것은 내가 이미 JQuery 객체를 가지고 있기 때문에이 객체 (from take stuff)를 필요로하기 때문에이 $ ('div> div')와 같은 선택기가 될 수 없다는 점에 유의하십시오.

+0

"... 요소의 일반 배열 (JQuery 객체)을 가져 오는 중 ..."*이 무슨 뜻인지 궁금합니다. 어느 것을 원했습니까? 배열 또는 jQuery 객체? – user113716

+0

jQuery 객체는 실제로 배열입니다. 부모와 모든 중첩 된 요소를 가져오고 싶습니다. – megas

+0

아니요, jQuery 객체는 Array와 유사한 객체라고도하지만 실제 배열은 아닙니다. – user113716

답변

17

당신은 아이들과 * 선택기를 사용 손자를 검색 할 수 있습니다. 항목은 트리 순서로 반환됩니다. 그런 다음 jQuery.toArray()를 사용하여 요소의 일반 배열을 얻을 수 있습니다 :

function recursiveIterate($node, array) { 
 
    $node.children().each(function() { 
 
    array.push(this); 
 
    recursiveIterate($(this), array); 
 
    }); 
 
} 
 
$(function() { 
 
    var a = []; 
 
    recursiveIterate($("#wrapper"), a); 
 
    console.log(a); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 

 
<div id="wrapper"> 
 
    <div id="parent"> 
 
    <div id="child1"> 
 
     <div id="grandchild1"> 
 
     <div class="level-4"></div> 
 
     <div class="level-4"></div> 
 
     <div class="level-4"></div> 
 
     </div> 
 
    </div> 
 
    <div id="child2"> 
 
     <div class="level-3"></div> 
 
     <div class="level-3"></div> 
 
     <div class="level-3"></div> 
 
     <div class="level-3"> 
 
     <div class="level-4"></div> 
 
     <div class="level-4"></div> 
 
     <div class="level-4"></div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>
: 당신이 계층 구조 사용하여 재귀 반복에 더 관심이 있다면

$(function() { 
 
    var a = $("#wrapper").find("*").toArray(); 
 
    console.log(a); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 

 
<div id="wrapper"> 
 
    <div id="parent"> 
 
    <div id="child1"> 
 
     <div id="grandchild1"> 
 
     <div class="level-4"></div> 
 
     <div class="level-4"></div> 
 
     <div class="level-4"></div> 
 
     </div> 
 
    </div> 
 
    <div id="child2"> 
 
     <div class="level-3"></div> 
 
     <div class="level-3"></div> 
 
     <div class="level-3"></div> 
 
     <div class="level-3"> 
 
     <div class="level-4"></div> 
 
     <div class="level-4"></div> 
 
     <div class="level-4"></div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

다음은 잔인한하지만 유용

+0

recursiveIterate 함수는 재귀가 좋지 않기 때문에 나에게 매우 도움이된다. – megas

+0

@megas : 첫 번째 예는 * flat * 배열을 제공한다. 배열의 배열을 만드는 데 초를 사용할 수 있습니다 (설명하지 않음). –

6

toArray()[docs] 메서드를 사용하여 jQuery 객체를 배열로 만들 수 있습니다.

var arr = my_obj.toArray(); 

... 또는 당신이 어떤 인수를 전달하지 않을 경우 get()[docs] 방법.

var arr = my_obj.get(); 

내가 잘못 이해 한 경우

, 당신은 구조의 루트를 가리키는 및 find()[docs] 방법 방법을 사용, 그 자손을 얻을 필요가 있습니다.

var descendants = my_obj.find('div'); 

주어진 지점에서 DOM 구조의 주위에하자 jQuery를 has many traversal methods. 당신 어린이와 손자, 깊은 아무것도를 원한다면


, 이렇게 :

var two_generations = my_obj.find('> div > div'); 

이것은 당신에게 단지 2 세대 깊은 div 요소를 제공 할 것입니다.

당신이 div 요소를 제한하지 않으려면 다음을 수행

var two_generations = my_obj.find('> * > *'); 
+0

그리고 저는 당신이'$ ('parent, parent *'). toArray()를 의미한다고 믿습니다. –

+0

@patrick dw, 자녀와 손자녀도 갖게 될까요? –

+0

@ kmb385 : 질문 제목과 텍스트가 약간 어긋나는 것처럼 보입니다.하지만 OP가 실제로는 특정 노드 만 참조하고 전체 세트는 참조하지 않을 경우를 대비하여 답변을 업데이트했습니다. – user113716

0

안녕하세요, 저는 여기 꽤 예쁘고 비슷한 두뇌 방구를 가지고있었습니다. 손주를 얻으려면 나는을 사용하는 것이 좋습니다.children() 접근 방식 :

$('#parent') //selects the parents 
$('#parent').children() //selects the children 
$('#parent').children().children() //selects the grandchildren