2009-04-06 18 views
66

मुझे लगा कि यह एक तेजी से एक बहुत बड़ी तालिका की सामग्री (3000 पंक्तियाँ) दूर करने के लिए जिस तरह से हो सकता है से सभी पंक्तियों को दूर करने के लिए सबसे तेज़ तरीका:jQuery - एक बहुत बड़ी मेज

$jq("tbody", myTable).remove(); 

लेकिन यह पाँच के आसपास ले रहा है फ़ायरफ़ॉक्स में पूरा करने के लिए सेकंड। क्या मैं कुछ गूंगा कर रहा हूं (एक ब्राउज़र में 3000 पंक्तियों को लोड करने की कोशिश करने के अलावा)? क्या ऐसा करने का कोई तेज तरीका है?

उत्तर

150
$("#your-table-id").empty(); 

जितना तेज़ हो उतना तेज़ है।

+0

में 2- हममम। निराशा होती। मुझे लगता है कि हटाना सम्मिलन से बहुत तेज होगा। मैं वास्तव में टेबल को छिपाने की तरह बदसूरत सामान करना चाहता हूं और जब मैं इसे अपडेट करना चाहता हूं तो एक नया बना देता हूं। – morgancodes

+9

हाँ, ठीक है ... HTML को किसी पृष्ठ में 3k पंक्तियां दिखाने के लिए नहीं बनाया गया था :) क्या आप किसी भी पृष्ठबद्ध समाधान के बारे में नहीं सोच सकते? इससे यह बहुत तेज़ हो जाएगा। निश्चित रूप से यह अधिक काम की मांग करेगा, लेकिन यह एक बहुत समृद्ध उपयोगकर्ता अनुभव होगा। – Seb

+0

मैंने इसे मूल रूप से पेजिनेटेड बनाया, लेकिन क्लाइंट ने स्क्रॉलिंग पर जोर दिया :(अच्छी खबर 3k पंक्तियां एक बढ़त का मामला है। अधिक सामान्य कुछ सौ होगा। – morgancodes

3

दो मुद्दों मैं यहाँ देख सकते हैं: jQuery के

  1. खाली() और() हटाएं तरीकों वास्तव में काफी काम का एक सा है। क्यों जॉन रेसिग के JavaScript Function Call Profiling देखें।

  2. अन्य बात यह है कि सारणीबद्ध डेटा की बड़ी मात्रा के लिए आप सर्वर से तेज़ी से अपने डेटा लोड करने के इस तरह के उत्कृष्ट DataTables के रूप में एक datagrid पुस्तकालय की सोच सकते हैं, नेटवर्क कॉल की संख्या बढ़ रही है, लेकिन के आकार को कम कर दें वो कॉल मेरे पास 1500 पंक्तियों के साथ एक बहुत ही जटिल तालिका थी जो काफी धीमी हो गई, नई AJAX आधारित तालिका में बदलकर यह वही डेटा तेजी से प्रतीत होता है।

+0

धन्यवाद artlung। वास्तव में कुछ ऐसा करना, सर्वर से एक बार में सभी डेटा प्राप्त करना, लेकिन आवश्यकता होने पर केवल तालिका पंक्तियां बनाना। – morgancodes

+0

एक अच्छी कॉल की तरह लगता है। मैं सोच रहा हूं कि ब्राउज़र में किसी तालिका में पंक्तियों की संख्या के बारे में चिंता करना हमेशा एक मुद्दा होगा, या यदि अधिकांश कंप्यूटरों के लिए स्मृति के रूप में यह एक मुद्दा से कम होगा। – artlung

+0

मेमोरी लोड होने वाले डेटा की मात्रा में कोई समस्या नहीं है। बोटलक डीओएम हेरफेर है। – morgancodes

0

आप केवल तेजी से निकालना चाहते हैं .. आप नीचे दिए गए की तरह कर सकते हैं ..

$("#tableId tbody tr").each(function(){ 
    this.parentNode.removeChild(this); 
}); 

लेकिन, तालिका में किसी घटना-आबद्ध तत्व हो सकते हैं,

उस मामले में

,

कोड ऊपर

में आईई ... टीटी और एफएफ में तेजी से नहीं स्मृति रिसाव रोकने के लिए नहीं है ...

खेद ....

55

यह छोरों के किसी भी प्रकार से बचने के लिए सिर्फ इस तरह सीधे सभी तत्वों को दूर बेहतर है:

$("#mytable > tbody").html(""); 
+3

'html (" ") 'कॉल' खाली()' आंतरिक रूप से –

+3

मेरे लिए अच्छा समाधान क्योंकि यह किसी तालिका के शीर्षलेख को नहीं हटाता है। धन्यवाद! – Daria

+0

@ डारिया पूरी तरह से चयनकर्ताओं का उपयोग करते हैं, यह आपके शीर्षकों को जगह में रखेगा: $ ('टेबल टैब्बी') खाली(); – Dani

-2

आप इस कोशिश कर सकते ...

var myTable= document.getElementById("myTable"); 
if(myTable== null) 
    return; 
var oTBody = myTable.getElementsByTagName("TBODY")[0]; 
if(oTBody== null) 
    return; 
try 
{ 
    oTBody.innerHTML = ""; 
} 
catch(e) 
{ 
    for(var i=0, j=myTable.rows.length; i<j; i++) 
     myTable.deleteRow(0); 
} 
-1

इस काम करता है मेरे लिए: प्रत्येक पंक्ति "removeRow"

के लिए

1- ऐड वर्ग 0

jQuery

$(".removeRow").remove(); 
संबंधित मुद्दे