2012-05-23 16 views
8

मैं वास्तव में सोच रहा हूं कि jQuery remove फ़ंक्शन वास्तव में डोम से तत्वों को हटा देता है।
सबसे पहले, मैंने here देखा लेकिन उत्तर विश्वसनीय नहीं हैं।
मुझे इस समस्या का सामना करना पड़ा जब मैंने देखा कि मैं अभी भी उन तत्वों में हेरफेर करने में सक्षम हूं जिन पर मैंने निकालें फ़ंक्शन कहा है।
क्या jQuery हटाने का कार्य वास्तव में डोम तत्वों को हटा देता है?

मेरे कोड:

<div id="container"> 
    <div id="div"> 
     This is a div 
    </div> 
</div> 

var div = $('#div'); 
$('#div').remove(); 
$('#container').append(div); 

नोट: यह कैसे हल करने के लिए मेरा प्रश्न नहीं है? लेकिन मैं समझना चाहता हूं कि यहां क्या हो रहा है!

दरअसल, यह कोड डोम से #div को नहीं हटाता है, लेकिन अगर मेरे पास डेटा #div पर सेट है, तो यह खो जाएगा। के व्यवहार के बारे में अब मैं बहुत उलझन में हूं फ़ंक्शन हटा दें। क्या कोई इसे समझा सकता है? DEMO

मुझे विश्वास है कि div चर सिर्फ डोम तत्व का क्लोन नहीं है हूँ,, यह करने के लिए एक संदर्भ है क्योंकि जब मैं div चर हेरफेर, (जैसे div.html('something')) div डोम के भीतर प्राप्त अपडेट किया गया।
या मैं गलत हूँ?

+3

हाँ, http://api.jquery.com/remove/ सकता है रहस्य अनलॉक :)) –

+3

जब तक कि उस वस्तु को किसी वस्तु (किसी चर में संग्रहीत) से संदर्भित किया जाता है, इसे डीओएम से हटा दिया जाता है, लेकिन स्मृति से कभी नहीं हटाया जाता है। – Joseph

+2

@Tats_innit दोस्त, क्या आपको सच में लगता है कि मैंने पहले इसे नहीं पढ़ा ?? – skafandri

उत्तर

14

remove() वास्तव में डोम से तत्व को हटा देता है।

हालांकि आपके उदाहरण में, तत्व स्मृति में कैश किया गया है क्योंकि आपने इसे div चर पर असाइन किया है। इसलिए आप अभी भी इसका उपयोग कर सकते हैं, और इसे फिर से जोड़ सकते हैं, और इसमें अभी भी मूल की सभी घटनाएं शामिल होंगी।

यदि आप जो कहते हैं वह सही है, तो मैं div को इतना डेटा क्यों खो देता हूं?

यदि आप चेक source for remove() आपको लगता है कि यह कॉल आंतरिक cleanData समारोह जो घटनाओं दूर करता है और तत्व के लिए data कैश को साफ करता है देखेंगे। यही कारण है कि आप जानकारी खो देते हैं।

यदि आप डीओएम से तत्व को हटाना चाहते हैं, लेकिन तत्वों को रखें, तो इसके बजाय detach() का उपयोग करें। http://jsfiddle.net/2VbmX/

+0

वास्तव में खराब लड़का कैशिंग!+1 –

+0

mmmm अजीब लगता है ... div = डोम के संदर्भ! और वह डोम से वस्तुओं को हटा देता है। तो अगर वह div को पढ़ने की कोशिश करता है - उसे div -> शून्य को संदर्भित करना चाहिए! –

+1

यदि आप जो कहते हैं वह सही है, तो मैं ** डेटा ** को div से क्यों रोकता हूं? – skafandri

2

सौंपा चर को नष्ट करने के लिए किया था:

यहाँ अंतर दिखाने के लिए एक बेला है

delete div; 
संबंधित मुद्दे