2010-02-19 16 views
9

मैं jQuery का उपयोग कर रहा है, और एक मेज तत्व यह है कि कुछ सौ पंक्तियां हैं की है। मैं सभी पंक्तियों को हटाना चाहता हूं, और फिर पंक्तियों का एक नया सेट जोड़ना चाहता हूं। मैं इसे हटाकर और मूल तत्व पर संलग्न करके ऐसा करता हूं।आईई में डीओएम से बाल तत्वों को हटाने का सबसे तेज़ तरीका क्या है?

मेरे संलग्न तर्क काफी तेज है, और सलाह यहाँ दी गई इस प्रकार है: http://www.learningjquery.com/2009/03/43439-reasons-to-use-append-correctly

हालांकि, दूर करने के लिए एक फोन 5 बार के रूप में लंबे संलग्न के रूप में लेता है। डोम तत्व के बच्चों को साफ़ करने का सबसे तेज़ तरीका क्या है?

संपादित करें: यहाँ कोड मैं का उपयोग का एक संक्षिप्त संस्करण है:

var table = $('#mytable'); 
$('tbody', table).remove(); 
table.append(tBodyContents.join('')); 

tBodyContents, तार की एक सरणी है कि जब संयुक्त tbody में पंक्तियों के लिए एक एचटीएमएल बनेगी।

+0

आप हमें अपने कोड दिखा सकते हैं के लिए धन्यवाद? – Sampson

+0

क्या आप उस कोड को पोस्ट कर सकते हैं जिसका उपयोग आप सभी पंक्तियों को हटाने के लिए करते हैं? – SBUJOLD

+0

इसे वहां रखो; खेद है कि मैंने इसे पहले शामिल नहीं किया था! – bluemoo

उत्तर

6
function emptyElement(element){ 
    var i = element.childNodes.length; 
    while(i--){ 
    element.removeChild(element.lastChild); 
    } 
} 

यह एक वास्तव में innerHTML चाल की तुलना में तेज है, बहुत जल्दी हो सकता है, आपके ब्राउज़र पर निर्भर करता है। वहाँ समान कार्य है कि आप कुछ मानक दे देंगे का उपयोग कर jsperf पर कुछ परीक्षण ...

+2

उदाहरण के लिए http://jsperf.com/jquery-empty-vs-html/14 –

+0

मुझे यकीन नहीं है कि स्वीकृत उत्तर क्यों है। एचटीएमएल (''), जबकि यह वास्तव में एक बहुत तेज़ समाधान है। एक आंतरिक स्ट्रिंग में आंतरिक HTML या .html() को सेट करना वास्तव में इसके प्रदर्शन की वजह से खराब अभ्यास माना जाता है। मेरे शब्दों का बैकअप लेने के लिए, यहां एक परीक्षण है: http: // jsperf।com/innerHTML-बनाम-removechild/239 – boyomarinov

7

मैं आमतौर पर जहां जरूरत पंक्तियों को फिर से जोड़ने के

$('#myTableToEmpty').html(''); 

करना तो।

+0

शायद $ ('# myTableToEmpty टीआर') की तुलना में तेजी।() हटाएं – ryanulit

+0

मैं एक ही बात करते हैं। यह सरल और तेज़ है। +1 –

+3

क्या यह विधि बाध्य घटनाओं और jQuery डेटा को भी साफ़ करती है? यह एक बात है कि (दस्तावेज़ों के अनुसार) निकालें() फ़ंक्शन करता है। संपादित करें: दस्तावेज़ों से - * तत्वों के अलावा, तत्वों से जुड़े सभी बाध्य घटनाओं और jQuery डेटा को हटा दिया जाता है। * – user113716

1

तो गति वास्तव में, वास्तव में महत्वपूर्ण है, तो आप innerHTML का उपयोग करने का सबसे अच्छा कर रहे हैं। $ ('tbody', टेबल) [0] .innerHTML = '';

मैं व्यक्तिगत रूप से सिर्फ jQuery को अनदेखा करता हूं, शरीर को एक आईडी देता हूं और बस दस्तावेज़ के लिए जाता हूं .getElementById ('id')। InnerHTML = '' विकल्प। और अभी भी जोड़ने के लिए jQuery का उपयोग करें।

+0

में मैं एक "अज्ञात रनटाइम त्रुटि" जब मैं यह कोशिश यह सबसे खराब विधि है। मैं देखूंगा कि क्या मैं समझ सकता हूं कि मैं क्या गलत कर रहा हूं। – bluemoo

0

मैं पुष्टि innerHTML एक एक तत्व से विशाल एचटीएमएल दूर करने के लिए बहुत बहुत तेजी से होता है। मेरे मामले में:

$('#main').html(''); // --> approx 5-6 seconds 

$('#main').innerHTML=''; // --> a few milliseconds 

सुझावों

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

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