2009-02-17 15 views
20

जब आप किसी तत्व को हटाते हैं और संलग्न करते हैं तो jQuery में क्या होता है() इसे कहीं और?जब आप किसी तत्व को हटाते हैं और संलग्न करते हैं तो jQuery में ईवेंट खो जाते हैं() इसे कहीं और जोड़ते हैं?

ऐसा प्रतीत होता है कि घटनाएं अनियंत्रित हैं - जैसे कि आप केवल ताजा एचटीएमएल डालने वाले थे (जो मुझे लगता है कि क्या हो रहा है)। लेकिन यह भी संभव है कि मेरे कोड में एक बग है - इसलिए मैं जारी रखने से पहले ही इस व्यवहार को सत्यापित करना चाहता था।

यदि यह मामला है - क्या एचटीएमएल के उस हिस्से को घटनाओं को फिर से शुरू करने के लिए कोई आसान तरीका है, या घटना को खोने के बिना तत्व को स्थानांतरित करने का एक अलग तरीका है।

उत्तर

28

हां, remove() के साथ jQuery का दृष्टिकोण jQuery के अपने bind (मेमोरी लीक को रोकने के लिए) से जुड़ी सबकुछ को अनदेखा करना है।

हालांकि, अगर आप सिर्फ डीओएम में कुछ स्थानांतरित करना चाहते हैं, तो आपको पहले remove() नहीं होना चाहिए। बस append अपने दिल की सामग्री के लिए, घटना बाइंडिंग जाएगा चारों ओर :)

छड़ी उदाहरण के लिए, यह आपके फ़ायरबग में इस पृष्ठ पर पेस्ट:

$('li.wmd-button:eq(2)').click(function(){ alert('still here!') }).appendTo(document.body) 

और अब इस पेज के नीचे तक स्क्रॉल करते और अब एसओ पाद लेख के नीचे दफन किए गए छोटे ग्लोब आइकन पर क्लिक करें। आपको alert मिलेगा। सब क्योंकि मैंने पहले remove पर ध्यान नहीं दिया था।

+0

ठंडा। मैं उम्मीद कर रहा था कि ऐसा कुछ मामला था। इंटरैक्टिव stackoverflow के लिए yay! –

0

उपयोग jQuery1.3.1 रहते हैं() की घटनाओं बाध्य करने के लिए और आप इस बारे में चिंता करने की जरूरत नहीं होगी ..

अपडेट: लाइव ईवेंट अब पदावनत कर रहे हैं, लेकिन आप $ से एक ही प्रभाव प्राप्त कर सकते हैं (दस्तावेज़) ।पर()।

+0

तो हाँ मेरे मूल प्रश्न के लिए? वास्तव में क्या होता है। मैं अब 'लाइव' में चेक करूंगा –

+0

लाइव के बारे में जानना निश्चित रूप से अच्छा है - लेकिन यहां पर चेतावनी से सावधान रहना होगा http://docs.jquery.com/Events/live#typefn –

+1

यदि आप साथ काम कर रहे हैं तो लागू नहीं है विशिष्ट डोम ऑब्जेक्ट्स और चयनकर्ता नहीं। यह मेरा पहला विचार भी था। –

51

jQuery अलग करें() समारोह निकालें() रूप में ही है, लेकिन उद्देश्य यह है कि यह रिटर्न में ईवेंट हैंडलर्स बरकरार रखता है। यदि आपको आइटम को हटाना है और इसे कहीं और जगह के साथ कहीं भी रखना है, तो आप इसका उपयोग कर सकते हैं। यहाँ

var objectWithEvents = $('#old').detach(); 
$('#new').append(objectWithEvents); 

चेक एपीआई डॉक्स: http://api.jquery.com/detach/

+0

मुझे तत्वों का एक समूह क्रमबद्ध करने की आवश्यकता है, उन्हें $ parent.empty() का उपयोग करके अपने माता-पिता से हटा दें, फिर तत्वों की क्रमबद्ध सूची को उनके माता-पिता पर वापस जोड़ दें। यह मेरे लिए सही जवाब था। धन्यवाद! – Bart

+0

धन्यवाद !!! मेरे लिए काम। – jruzafa