jquery - খুব বড় টেবিল থেকে সমস্ত সারি সরিয়ে ফেলার দ্রুততম উপায়


96

আমি ভেবেছিলাম এটি একটি খুব বড় টেবিলের (3000 সারি) সামগ্রীগুলি সরিয়ে ফেলার দ্রুত উপায় হতে পারে:

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

তবে ফায়ারফক্সে সম্পূর্ণ হতে পাঁচ সেকেন্ড সময় লাগছে। আমি কি বোবা কিছু করছি (ব্রাউজারে 3000 সারি লোড করার চেষ্টা বাদ দিয়ে)? এটি করার কি আরও দ্রুত উপায় আছে?

উত্তর:


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

এটি যত তাড়াতাড়ি আপনি পান


হুমমম। হতাশাজনক। আমি মনে করব যে মুছে ফেলা সন্নিবেশের চেয়ে অনেক দ্রুত হবে। ধরনের আমাকে সত্যই কুরুচিপূর্ণ জিনিস করতে চায় যেমন কেবল টেবিলটি লুকিয়ে রাখুন এবং যখন আমি এটি আপডেট করতে চাই তখন একটি নতুন তৈরি করুন।
মরগানকোডস

10
হ্যাঁ, ভাল ... এই পৃষ্ঠায় 3k সারি দেখানোর জন্য এইচটিএমএল তৈরি করা হয়নি :) আপনি কোনও পৃষ্ঠাবদ্ধ সমাধানের কথা ভাবতে পারেন না? এটি এটি আরও দ্রুত তৈরি করবে। অবশ্যই এটি আরও কাজের দাবি করবে, তবে এটি অনেক বেশি সমৃদ্ধ ব্যবহারকারীর অভিজ্ঞতা হবে।
Seb

7
এই ভাল। সমস্যাটি এটি সারণী শিরোনামগুলিও সরিয়ে ফেলবে।
ইসুরু

4
শিরোনামগুলি সরিয়ে দেয় :(
সন্দীপ কুশওয়াহ

6
এটি শিরোনাম সহ টেবিলের সমস্ত কিছু সরিয়ে ফেলবে। আমি ধরে নিয়েছি যে @ এমরগানকোডগুলি শিরোনামগুলি নয়, সারণীগুলি সারণীগুলি সরিয়ে ফেলতে চায় যারা এটি পরে খুঁজে পান তাদের জন্য সমাধানটি হবে $('#mytable tbody').empty();। এটি নিশ্চিত করে যে কেবলমাত্র লোকটি খালি হয়ে যায়।
ওমনিওল

83

যে কোনও ধরণের লুপগুলি এড়ানো ভাল, কেবলমাত্র এই জাতীয় উপাদানগুলিকে সরাসরি সরান:

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

6
html("")empty()অভ্যন্তরীণভাবে কল করুন
এমিল বার্গারন

8
আমার পক্ষে দুর্দান্ত সমাধান কারণ এটি কোনও টেবিলের শিরোনাম সরিয়ে দেয় না। ধন্যবাদ!
দারিয়া

@ দারিয়া সিলেক্টরকে পুরোপুরি ব্যবহার করুন, এটি আপনার শিরোনামকে ঠিক জায়গায় রাখবে: $ ('টেবিল টোডি') empty খালি ();
দানি

("#mytable> tbody") এবং ("# মাই টেবিল") ব্যবহারের মধ্যে কী আলাদা the
agগলই

4
আপনার টেবিলের এক সারিতে যদি নেস্টেড টেবিল থাকে তবে এটি সেই টডি ট্যাগগুলিও সরিয়ে ফেলবে। আপনার যদি কেবল একটি একক টেবিল থাকে তবে এটি খুব আলাদা হওয়া উচিত নয়।
শিরয়


7

বিযুক্তি ব্যবহার করা এখানে অন্যান্য উত্তরগুলির তুলনায় দ্রুততরতা:

$('#mytable').find('tbody').detach();

টডি উপাদানটি টেবিলে ফিরিয়ে দিতে ভুলবেন না যেহেতু বিচ্ছিন্নতা এটি সরিয়ে ফেলেছে:

$('#mytable').append($('<tbody>'));  

আরও মনে রাখবেন যে কথা বলার সময় দক্ষতা $(target).find(child)বাক্য গঠন যখন দ্রুত হয় $(target > child)। কেন? সিজল!

ফাঁকা সময় কেটে গেছে 3,161 সারণি সারি

ডিটাচ () পদ্ধতিটি ব্যবহার করা (উপরে আমার উদাহরণে দেখানো হয়েছে):

  • ফায়ারফক্স: 0.027 এস
  • ক্রোম: 0.027 সেকেন্ড
  • প্রান্ত: 1.73s
  • আইই 11: 4.02 এস

খালি () পদ্ধতিটি ব্যবহার করে:

  • ফায়ারফক্স: 0.055 এস
  • ক্রোম: 0.052 এস
  • প্রান্ত: 137.99s (পাশাপাশি হিমায়িত হতে পারে)
  • আইই ১১: হিমশীতল এবং কখনই ফিরে আসে না

3

আমি এখানে দুটি বিষয় দেখতে পারি:

  1. JQuery এর খালি () এবং অপসারণ () পদ্ধতিগুলি আসলে বেশ কিছুটা কাজ করে। জন রেগের জাভাস্ক্রিপ্ট ফাংশন কল প্রোফাইলিং কেন তা দেখুন।

  2. অন্য জিনিসটি হ'ল বড় পরিমাণের টাবুলার ডেটাগুলির জন্য আপনি কোনও ডাটাগ্রিড লাইব্রেরি বিবেচনা করতে পারেন যেমন সার্ভার থেকে ফ্লাইতে আপনার ডেটা লোড করার জন্য দুর্দান্ত ডাটা টেবিল , নেটওয়ার্ক কলগুলির সংখ্যা বাড়িয়ে তুলতে, তবে সেই কলগুলির আকার হ্রাস করতে পারে। আমার 1500 সারি সহ একটি খুব জটিল টেবিল ছিল যা বেশ ধীরে ধীরে পেয়েছিল, নতুন এজাজ ভিত্তিক টেবিলটিতে পরিবর্তনের ফলে এই একই ডেটাটি দ্রুত দেখায়।


ধন্যবাদ আর্টল্যাং সার্ভার থেকে একবারে সমস্ত ডেটা পাওয়াতে আসলে এর মতো কিছু করা, তবে যখন প্রয়োজন হয় কেবল টেবিলের সারিগুলি আঁকুন।
মরগানকোডস

একটি ভাল কল মত শোনাচ্ছে। আমি ভাবছি যদি কোনও ব্রাউজারে কোনও টেবিলের সারিগুলির সংখ্যা নিয়ে চিন্তা করা সবসময়ই একটি সমস্যা হয়ে দাঁড়াবে, বা যদি বেশিরভাগ কম্পিউটারের স্মৃতিশক্তি বাড়তে থাকে তবে এটি কোনও সমস্যার কম হবে।
আর্টলুং

আমি যে পরিমাণ ডেটা লোড করছি তাতে স্মৃতি কোনও সমস্যা নয়। বোতল নেক ডিওএম ম্যানিপুলেশন।
মরগানকোড

আমি মনে করি আমরা একই কথা বলছি। আপনি যত বেশি ডেটা লোড করবেন, তত বেশি ডোম নোড আপনি লোড করবেন, আমার কাছে এগুলি মেমরির প্রয়োজনীয়তার সাথে সম্পর্কিত। আমি আশা করি নির্বিশেষে আপনার অবস্থার উন্নতি হয়েছে।
আর্টলুং

1

আপনি যদি কেবল দ্রুত সরাতে চান .. আপনি নীচের মত করতে পারেন ..

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

তবে, টেবিলে কিছু ইভেন্ট-বাঁধা উপাদান থাকতে পারে,

এই ক্ষেত্রে,

উপরের কোডটি আইই তে মেমরি ফাঁস রোধ করে না ... টিটি এবং এফএফ-তে দ্রুত নয় ...

দুঃখিত ...


0

এটি আমার পক্ষে কাজ করে:

1- প্রতিটি সারিতে "অপসারণ" এর জন্য ক্লাস যুক্ত করুন

2- jQuery এ

$(".removeRow").remove();

-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);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.