2011-03-04 22 views
7

removeChild फ़ंक्शन वास्तव में बच्चे नोड को पूरी तरह हटा देता है? या यह निर्दिष्ट पैरांट नोड के बच्चे होने के तत्व को हटा देता है? यदि यह वास्तव में तत्व को हटा नहीं देता है, तो तत्व को पूरी तरह से हटाने का कोई तरीका है?क्या हटाएं बच्चे वास्तव में तत्व को हटा देता है?

उत्तर

14

removeChild विधि बस अपनी मूल से निकालता है। यदि यह पृष्ठ का एक दृश्य तत्व है, तो इसे पृष्ठ से हटा दिया जाएगा।

लेकिन जावास्क्रिप्ट में कचरा संग्रह है। इसका मतलब है कि जब नोड ऑब्जेक्ट स्वयं को संदर्भित करता है तब तक नोड ऑब्जेक्ट अस्तित्व में रहेगा। तो आप एक चर के लिए एक नोड असाइन कर सकते हैं, removeChild का उपयोग अपने मूल नोड से 'prune' करने के लिए करें, और बाद में, इसे किसी अन्य नोड में डालें या संलग्न करें, जिससे प्रभावी रूप से इसे पृष्ठ पर चारों ओर ले जाया जा सके।

निम्नलिखित कोड एक नोड निकाल देंगे, और यह पेड़ को फिर से जोड़ने (और इस प्रकार, पृष्ठ के लिए) से पहले 10 सेकंड प्रतीक्षा:

var oldNode = someNode.removeChild(...); 
setTimeout(function() { 
    document.documentElement.appendChild(oldNode); 
}, 10000); 

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

एक और मामला:

var node = document.getElementById('test'); 
// ... do stuff 
node.parentElement.removeChild(node); 
// 'node' still exists, but has been removed from the page 
// ... do some more stuff 
node = document.getElementById('hello'); 
// The variable 'node' now points to something else; 
// this means the original node will be deleted from memory 

हैं, तो दूसरी ओर, आप अन्य चर को हटा दिया नोड को पुन: असाइन नहीं , तो वह उसके (दस्तावेज़ पेड़ के माध्यम से नहीं पहुँचा नहीं जा सकता, क्योंकि इसे वहां से हटा दिया गया है, और जेएस वैरिएबल के माध्यम से नहीं); इसलिए जावास्क्रिप्ट स्वचालित रूप से स्मृति से उसे साफ करेगा:

someNode.removeChild(...); 

एक चर करने के लिए हटा दिया नोड असाइन करना और उसके बाद null (या कुछ और) कि चर को बताए - मार्क बी उसके जवाब में पता चलता है की तरह - पूरी तरह से अनावश्यक है और, आईएमएचओ, मूर्खतापूर्ण।

1

removeChild डोम से तत्व को हटा देता है, लेकिन यदि आप इसे कहीं और फिर से डालने के लिए हटाने के लिए कर रहे हैं तो यह फ़ंक्शन से भी वापस आ गया है। इसलिए यह नहीं है

someNode.removeChild(...); 

यह डोम से नोड निकाल देगा:

oldNode = someNode.removeChild(...); 
oldNode = null; 
+0

ओह धन्यवाद का उपयोग करने की आवश्यकता है :) –

+5

क्या किसी भी चीज़ पर वापसी मूल्य निर्दिष्ट नहीं करना चाहिए, वही प्रभाव है? – awm

+1

नल का सुविधाजनक और यह स्पष्ट करता है कि आप मूल्य को मिटा रहे हैं। 'oldNode = 'इस नोड को हटाएं'; 'बस वर्णों की बर्बादी की तरह लगता है। –

10

यह पूरी तरह से नोड को नष्ट करेगा: आप वास्तव में हटा दिया नोड से छुटकारा पाने के लिए है कि वापसी मान को मारने के लिए होगा दिखाई लेकिन यह बचत होगी, ताकि आप इसे कहीं और सम्मिलित कर सकते हैं:

oldNode = someNode.removeChild(...); 
+1

पहला उदाहरण सही है, लेकिन मेरे पास ऐसी स्थिति थी जहां यह काम नहीं कर रहा था, उदा।'var aChild = document.createElement (...); someNode.appendChild (aChild); ... someNode.removeChild (aChild); 'नोड AChild चर संदर्भ के कारण रहता है। उस स्थिति में आपको नौकरी को पूरा करने के लिए 'चाइल्ड हटाएं' की आवश्यकता है। – CyberFonic

+0

किसी अन्य संदर्भ से (जहां आप नहीं जानते कि हटाए गए नोड के अन्य संदर्भ हैं या नहीं), आप यह देखने के लिए जांच सकते हैं कि निकाला गया नोड किस स्थिति में है 'node.parentElement == null' –

+0

यह खाता नहीं लेता है नोड के अन्य संदर्भ। मतलब अगर नोड को संदर्भित किया जाता है तो 'removeChild' पूरी तरह से नोड को हटा नहीं देगा। –

1

यदि आप वास्तव में एक डोम तत्व को हटाना चाहते हैं। निकालें अकेले चाइल्ड पर्याप्त नहीं है। यह स्टीव साउंडर्स के अनुसार है जो वाईएसलो के लेखक हैं। आपको

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