2011-07-05 11 views
13

चलो कहते हैं कि मैं एक JQuery वस्तु है जो (करने के लिए अंक या) इस तरह की संरचना करते हैं इस तरह:JQuery, बच्चों और पोते को पुनः प्राप्त

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

धन्यवाद

पी एस कृपया ध्यान दें कि यह इस $ ('div> div') की तरह चयनकर्ता नहीं हो सकता है, क्योंकि मेरे पास पहले से JQuery ऑब्जेक्ट है और केवल इस ऑब्जेक्ट से मुझे सामान लेने की आवश्यकता है।

+0

मुझे यह जानने के लिए उत्सुकता है कि * * ... तत्वों की सादे सरणी (JQuery ऑब्जेक्ट) ... "* प्राप्त करें। आप कौन सा चाहते थे एक ऐरे, या एक jQuery वस्तु? – user113716

+0

jQuery ऑब्जेक्ट वास्तव में सरणी है, है ना? मेरा मतलब था कि मैं माता-पिता और सभी घोंसले तत्वों को प्राप्त करना चाहता हूं – megas

+0

नहीं, एक jQuery ऑब्जेक्ट को कभी-कभी ऐरे जैसी वस्तु कहा जाता है, लेकिन यह वास्तविक ऐरे नहीं है। – user113716

उत्तर

17

आप बच्चों और * चयनकर्ता का उपयोग करके पोते प्राप्त कर सकते हैं। आइटम पेड़ के आदेश में वापस आ जाएगा। इसके बाद आप jQuery.toArray() का उपयोग कर तत्वों का एक सादा सरणी प्राप्त कर सकते हैं:

$(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>

के बाद एक overkill लेकिन उपयोगी है जब आप पदानुक्रम का उपयोग कर प्रत्यावर्तन पुनरावृत्ति में अधिक रुचि रखते हैं:

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>

+0

रिकर्सिव इटरेट फ़ंक्शन मेरे लिए बहुत उपयोगी है, क्योंकि मैं रिकर्सन में अच्छा नहीं हूं, धन्यवाद – megas

+0

@मेगास: पहला उदाहरण आपको एक * फ्लैट * सरणी देगा; दूसरे का उपयोग सरणी की सरणी बनाने के लिए किया जा सकता है (प्रदर्शित नहीं)। –

6

आप अपनी jQuery ऑब्जेक्ट को ऐरे में बनाने के लिए toArray()[docs] विधि का उपयोग कर सकते हैं।

var arr = my_obj.toArray(); 

... या get()[docs] विधि अगर आप इसे पारित नहीं है किसी भी तर्क।

var arr = my_obj.get(); 

अगर मैं गलत समझा गया है, और आप जड़ संरचना के की ओर इशारा करते रहे हैं, और उसके वंश को पाने के लिए, find()[docs] विधि विधि का उपयोग की जरूरत है।

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

jQuery has many traversal methods आप किसी दिए गए बिंदु से डोम संरचना के चारों ओर चलते हैं कि।


आप केवल बच्चों और पोते, और गहरा कुछ भी नहीं करना चाहता था, तो ऐसा करते हैं:

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

यह आपको div तत्वों केवल 2 पीढ़ियों गहरी दे देंगे।

आप div तत्वों को सीमित करने के लिए नहीं करना चाहते हैं, ऐसा करते हैं:

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

और मेरा मानना ​​है कि आपका मतलब '$ ('पैरेंट, पैरेंट *') है। ToArray()', सही? –

+0

@ पैट्रिक dw, क्या यह बच्चों और पोते-बच्चों को भी मिलेगा? –

+0

@ kmb385: प्रश्न शीर्षक और पाठ सिंक से थोड़ा सा प्रतीत होता है, लेकिन यदि ओपी वास्तव में केवल एक विशेष नोड को संदर्भित करता है, तो पूरे उत्तर में नहीं, लेकिन मैंने अपना जवाब अपडेट किया। – user113716

0

अरे आदमी मैं यहाँ बहुत नया हूं और मुझे एक समान मस्तिष्क का झटका था। पोते को पाने के लिए, मैं इसका उपयोग करने का सुझाव देता हूं।बच्चे() दृष्टिकोण:

$('#parent') //selects the parents 
$('#parent').children() //selects the children 
$('#parent').children().children() //selects the grandchildren 
संबंधित मुद्दे