2012-06-20 9 views
14

मुझे उत्सुकता है कि क्यों jQuery का .after() श्रृंखला नहीं है, या आपके द्वारा बनाए गए नए तत्व को "प्रदान करता है"। ऐसा लगता है कि मुझे ऐसा करना चाहिए, लेकिन मैं कोई विशेषज्ञ नहीं हूं और उम्मीद कर रहा था कि कोई इस बारे में कुछ प्रकाश डालेगा कि यह बुरा विचार क्यों है।क्यों jQuery .after() नया तत्व श्रृंखला नहीं है?

यहाँ कुछ मार्कअप है: यहाँ एक उदाहरण देखने के लिए मैं .after से चाहते हैं क्या() है

<div id="content1"> 
    <p id="hello1">Hello</p> 
</div> 
<div id="content2"> 
    <p id="hello2">Hello</p> 
</div> 

यहाँ मैं क्या चाहते हैं, लेकिन प्रतिस्थापित कर देता है "हैलो" के साथ "दुनिया!":

$('#hello1').after('<p />').text('World!'); 

यह काम करता है, लेकिन यह सुनिश्चित बदसूरत है:

$('#hello2').after('<p />'); 
var $newParagraph = $('#content2 p').last(); 
$newParagraph.text('World'); 

यह अच्छे है, लेकिन मैं पूरी तरह से नहीं कर रहा हूँ बेचा: (शायद मैं shoul होगी?)

$('#hello1').after($('<p />').text('World')); 

नोट इस स्पष्ट रूप से एक सरल उदाहरण है, कि < पी > दुनिया है, "! </p > ", मेरे वास्तविक दुनिया समस्या यह है कि तुलना में अधिक जटिल है कि बस कैसे यह सबसे jQuery तरीकों के लिए है न कि मैं क्या जोड़ना चाहते है।

कोई विचार के लिए धन्यवाद।

+0

आपके अपेक्षित परिणाम क्या हैं? –

+0

ठीक है तो क्या किसी को आपके द्वारा जोड़े गए तत्व को प्राप्त करने का सबसे अच्छा तरीका पता है()? – Tim

उत्तर

20

मुमकिन है .after() काम करता है यह श्रृंखला अधिक तरीकों कि मूल रूप से चयनित तत्व (रों) पर लागू होगा करने के लिए आप की अनुमति के लिए करता है के रूप में:,

$('#hello1').after($('<p />').text('World')) 
      .before($('<p />').text('Before text')) 
      .remove(); 

यह व्यवहार अन्य तरीकों के साथ संगत रखता है ताकि आप नहीं है याद रखने की कोशिश करनी है कि कौन सा मूल वस्तु वापस लौटाता है और जो कुछ अन्य वस्तु को वापस करता है।

ध्यान रखें कि आपके मामले में $('#hello1') ठीक एक तत्व के बाद से उसकी पहचान से चयन कर रहे हैं का चयन करता है, लेकिन आप एक से अधिक तत्वों के बाद (क्लोन) सामग्री जोड़ने के लिए कई तत्वों से युक्त एक jQuery वस्तु को .after() आवेदन कर सकते हैं:

$('div.someclass').after($('<p/>').text('whatever')); 

मेरी राय में किस मामले में यह निश्चित रूप से चेनिंग संदर्भ को मूल jQuery ऑब्जेक्ट के रूप में रखने के लिए समझ में आता है।आप क्या चाहते हैं

.insertAfter() method के करीब हो सकता:

$('<p/>').insertAfter('#hello1').text('World'); 

(यह भी देता है jQuery वस्तु इसे करने के लिए लागू किया गया था, लेकिन यह "रिवर्स" में डालने करता है।)

आप कर सकते थे तत्व को जोड़ने के लिए अपनी खुद की प्लगइन विधि लिखें, लेकिन यह भ्रमित हो जाएगा क्योंकि यह सभी मानक तरीकों के विपरीत काम करेगा।

+0

हाँ, मुझे बेचा गया है, बस उन मजेदार चीजों में से एक है। धन्यवाद :) – Bung

+1

'.insertAfter' उदाहरण में '# हैलो 1' को लपेटने की कोई आवश्यकता नहीं है। – Alnitak

+0

अच्छा बिंदु @Annitak - उत्तर अपडेट किया गया। – nnnnnn

3

। यह jQuery के लिए बेहतर है ।

$('#hello1').after(
    $('<p/>', { text: 'World!' }) 
); 

या:

$('#hello1').after(
    $('<p/>').text('World!') 
); 
अनुरूप होना चाहिए और मूल वस्तु लौटने के लिए

ठीक है

या यहाँ तक कि:

$('<p/>').text('World!').insertAfter('#hello1'); 

बाद वास्तव में पसंद किया जा सकता है, क्योंकि यह तो नए <p> तत्व से श्रृंखला के लिए जारी है।

+0

धन्यवाद, समझ में आता है, मैंने दूसरा जवाब चुना क्योंकि यह एक स्पर्श अधिक वर्बोज़ है, लेकिन यह वही है। – Bung

+0

@ अच्छे उत्तर के लिए बंग अपवॉट्स अभी भी सराहना की गई हैं ... – Alnitak

0

यह आपको निर्मित तत्व प्रदान नहीं करता है क्योंकि आप हमेशा तत्व नहीं बनाते हैं, इसके लिए JQuery के लिए प्रसंस्करण शक्ति की एक बड़ी मात्रा की आवश्यकता होती है यह पता लगाने के लिए कि तत्व बनाया गया है और यह हमेशा के लिए अधिक समझ में आता है यह वापस लौटा है तत्व चुड़ैल ऑपरेशन का लक्ष्य था।

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