2013-06-03 12 views
8

मेरे पास एक पॉपअप प्लगइन है जो एक AJAX कॉल की प्रतिक्रिया के साथ <div/> की HTML सामग्री सेट करता है।HTML() से पहले या आंतरिक HTML से पहले खाली() को कॉल करना आवश्यक है?

हर बार जब मैं पॉपअप खोलता हूं, तो कोड में मैं बस $("#popup").html(response) पर कॉल करता हूं। यह नई सामग्री के साथ मौजूदा एचटीएमएल सामग्री को ओवरराइड करता है।

क्या मुझे पर कॉल करने से पहले $("popup").html(response) पर कॉल करना चाहिए, इसलिए मैं उन वस्तुओं द्वारा उपयोग की गई ब्राउज़र मेमोरी को रिलीज़ करता हूं जो पहले $("popup") div में थे? (अंततः मेमोरी लीक को रोकें)

पीएस: अगर मैं $("popup")[0].innerHTML = response पर कॉल करता हूं तो क्या होगा? क्या मुझे .empty() विधि कॉल करनी चाहिए?

+0

http://stackoverflow.com/questions/8567957/is-empty-enough-for-big-ajaxy-apps?rq=1 –

उत्तर

7

संक्षिप्त उत्तर संख्या।

jQuery.fn.html कई अन्य चीजें करने के बाद DOMNode.innerHTML = का उपयोग करता है। एक नोड्स पर संग्रहीत डेटा को हटाने के लिए है ($.fn.data के माध्यम से संग्रहीत), पूर्ण स्रोत अवलोकन के लिए http://james.padolsey.com/jquery/#v=git&fn=jQuery.fn.html देखें।

.innerHTML बच्चों को हटा देता है और नए एचटीएमएल के साथ बदल देता है। लेकिन स्मृति रिसाव से सावधान रहें। मैं आंतरिक HTML सेटिंग सेट करने से पहले jQuery.fn.empty का उपयोग करूंगा। जैसे।

var a = document.createElement('div'), 
    b = document.createElement('div'); 

    b.appendChild(a); 

    b.innerHTML = 'new innerHMTL'. 

आपको लगता है कि सबकुछ ठीक है। लेकिन नोड प्रतिस्थापन/हटाया गया है अभी भी a विविधता में कब्जा कर लिया गया है और इसलिए कचरा कलेक्टर को नहीं फेंक दिया गया है। मुझे यकीन है कि मौसम या कि नहीं jQuery भंडार DOMNodes आंतरिक जब तक आप फोन jQuery.removeData आदि

1

empty() पर कॉल करने की आवश्यकता नहीं है। html (response) विधि ovveridesexisting content

4

JQuery एचटीएमएल विधि के प्रलेखन का कहना है:

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

तो आपको empty() पर कॉल करने की आवश्यकता नहीं है।

0

.empty अलावा कोई अंतर() तेजी से और .html (चलाता है) संदर्भ की सामग्री अधिलेखित कर सकते हैं नहीं कर रहा हूँ

http://jsperf.com/jquery-empty-vs-html/17

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