2011-10-31 16 views
6

मैं सोच रहा था कि जब आप चयनकर्ता का उपयोग करते हैं तो jQuery कैसे डोम को घुमाता है। क्या यह प्रत्येक "प्रथम स्तर" तत्व को देखता है, और फिर उनमें से प्रत्येक के अंदर देखो? या क्या यह उन "प्रथम स्तर" तत्वों के प्रत्येक बच्चे को एक-एक करके देखता है?jQuery कैसे डोम को पार करता है?

[1] <div> 
    [3] <div> 
     [5] <p id="target"></p> 
     </div> 
    </div> 
[2] <div> 
    [4] <div> 
      <p></p> 
     </div> 
    </div> 

या की तरह:

[1] <div> 
    [2] <div> 
     [3] <p id="target"></p> 
     </div> 
    </div> 
    <div> 
     <div> 
      <p></p> 
     </div> 
    </div> 

$("div p#target")

इसे और अधिक की तरह आगे बढ़ना है:

मुझे समझाने क्या मैं कुछ त्वरित उदाहरण के साथ कल्पना की है, तो निम्न चयनकर्ता दिया करते हैं

+0

jQuery SizzleJS का उपयोग करता है, यह आपके प्रश्न का उत्तर नहीं है, लेकिन हो सकता है उनके डॉक्स आप मदद कर सकते हैं: http: // sizzlejs। कॉम/और https://github.com/jquery/sizzle/wiki/Sizzle- होम – Thys

+0

JQuery हमेशा झींगा का उपयोग नहीं करता है। उदाहरण के लिए, '$ ('# mydiv') 'sizzle का उपयोग नहीं करेगा। क्रोम और फ़ायरफ़ॉक्स में, '$ ('। Mydiv') 'sizzle का उपयोग नहीं करेगा, लेकिन आईई में <9 यह होगा। – AlienWebguy

+0

ठीक है, यह जानने के लिए कोई अनुमानित तरीका नहीं है कि यह कैसे काम करेगा:/ – Pioul

उत्तर

1

Traversal उसी क्रम में होता तत्वों डोम में हैं:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
<html> 
    <head> 
     <title>query traversal order</title> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> 
    </head> 
    <body> 
     <ul> 
      <li id="parent1"> 
       <ul> 
        <li id="child1"></li> 
        <li id="child2"></li> 
       </ul> 
      </li> 
      <li id="parent2"> 
       <ul> 
        <li id="child3"></li> 
        <li id="child4"></li> 
       </ul> 
      </li> 
     </ul> 
     <script type="text/javascript"> 
      // keep a list of ids 
      var arr = []; 
      // loop over all li elements 
      $('li').each(function(){ 
       // add their id to the array 
       arr.push($(this).attr('id')); 
      }); 
      // show contents of the array 
      alert(arr.join(', ')); 
     </script> 
    </body> 
</html> 

यह सूचित करेंगे "parent1, child1, child2, parent2, child3, child4";

+0

को देखकर परेशान न हो? इस पर कुछ लोगों ने जो कहा वह देखकर बहुत संगत नहीं लगता है। मैं अंततः अपने आप पर कोशिश कर सकता हूं, लेकिन कौन जानता है, शायद आप पहले से ही कर चुके हैं: डी – Pioul

+0

ठीक है नहीं, मैंने इसे सीधे टेक्स्टमैट से सफारी में चलाया, लेकिन यह बहुत समझ में आता है क्योंकि इसे दस्तावेज़ में सभी नोड्स ढूंढना है। किसी अन्य आदेश के लिए पेड़ के ट्रैवर्सल को लागू करना अधिक कठिन होगा। – Kris

+0

यह सच है, भले ही "सेंस बनाना" कुछ भी के लिए पर्याप्त प्रमाण नहीं है। मैं कुछ स्नैपेट में अपने स्निपेट चलाऊंगा और अगर हम गलत थे तो यहां वापस आएं। – Pioul

0

यदि आपका मतलब है कि वह आदेश जिसके द्वारा यह जाता है, मैं मैं मान रहा हूं कि jQuery स्वयं नहीं बल्कि वास्तविक डोम फ़ंक्शन है। यह शायद कार्यान्वयन पर निर्भर है और मैं उस पर भरोसा नहीं करता (जब तक कि यह चश्मा में परिभाषित न हो)।

आप इस तरह के विवरण जानने के लिए क्या करने की कोशिश कर रहे थे? शायद हम वास्तविक समस्या को हल करने में मदद कर सकते हैं।

+0

ट्रैवर्सल दस्तावेज़ आदेश में होने की संभावना है, यानी। गहराई-प्रथम (ओपी में आरेख 2)। – AKX

+1

मुझे किसी विशेष समस्या का सामना नहीं करना पड़ रहा है, लेकिन मैं jQuery का व्यापक उपयोग कर रहा हूं, और यह जानकर कि यह कैसे काम करता है, उदाहरण के लिए मुझे बेहतर चयनकर्ता बनाने में मदद करेगा। अगर यह मेरे पहले उदाहरण में काम करता है, तो मैं पहले div को आईडी दूंगा ताकि वह दूसरे ज्ञात ब्राउज़र में दूसरे – Pioul

0

अपने उदाहरण में, मुझे आशा है कि चाहते हैं तो वह ऐसा की प्रक्रिया होगा:

<div> 
[2] <div>     //check it matches the selector 
    [1] <p id="target"></p> //document.getElementById is cheap 
    </div> 
</div> 
<div> 
    <div> 
     <p></p> 
    </div> 
</div> 
+0

हाहा हां यह सच है, लेकिन यह उदाहरण शो के लिए था, मुझे दिलचस्पी है कि अधिक जटिल डीओएम के साथ क्या होता है – Pioul

संबंधित मुद्दे