0

いくつかの行を動的に削除するかなり大きなテーブルがあります。動作しますが、非常に遅いです。今は約かかります。IE8とFirefoxで50行を削除するのに1.5秒(ブラウザ間でほとんど違いはありません)。

DOMの操作は一般的に遅いことは知っていますが、これを行うにはもっと速い方法が必要です。

現在、私は次の構文を使用しています。

$("#myTable tr").slice(250, 300).remove();

メソッドのオフセットslice()は異なる場合があります。slice()これはjQuerysヘルプや他のメソッドで推奨されているので、同じことを実行するために使用find()しますeq()empty()削除する前に行うことについて読みましたが、それはさらに遅くなりました。

4

6 に答える 6

4

jQueryがレンダリングの更新をトリガーしている場合は、実際のjavascriptの使用を検討してください:http://jsfiddle.net/MbXX5/

var removeRows = function(ofTable,from,to) {
    for(var row=to; row>=from; --row) {
        ofTable.deleteRow(row);
    }
};

jsfiddleでわかるように、これは瞬時です。行番号が正しいままになるように、配列を逆にトラバースしていることに注意してください。ブラウザが使用するDOMコードとJIT戦略によっては、これによってパフォーマンスが向上する可能性があります。

[編集:どの行がなくなったかを本当に明確にするための色分けされたセルを備えた新しいjsfiddle]

于 2012-10-11T11:09:33.857 に答える
3

問題は、.remove()を実行するすべての行について、テーブルがブラウザによって再描画されることです。高速化するには、テーブルをDOMから削除し、行を取り出して、テーブルを元の場所に戻します。

$table = $("#myTable").clone(true,true);//First true to keep events, second true to deepcopy childs too. Remove it if you do not need it to make it faster.
$table.find("tr").slice(250,300);remove();
$("#myTable").replaceWith($table);
于 2012-10-11T10:48:58.537 に答える
1

フィルタを使用することはできますが、速くなるとは思いません

$("#myTable tr").filter(function(index){
     return index > 250 && index < 300;
).remove();
于 2012-10-11T10:45:26.837 に答える
0

問題は、ブラウザが行を削除するたびにDOMの画面ビューを更新しようとすることです。

あなたは1つでそれを行うことができます

  • テーブルをドキュメントから削除し、すべての行を削除してから、挿入し直します
  • テーブルのクローンを作成し、クローン上の要素を削除し、テーブルをクローンに置き換えます
  • または、残っている行の数が削除した行より少ない場合は、新しいテーブルを作成し、その中にすべての行を挿入して、既存のテーブルを新しいテーブルに置き換えることができます。

主なアイデアは、削除を行うときにテーブルがDOMにアタッチされないようにすることです。このようにすると、すべての行が削除された後にのみビューが更新されます。

于 2012-10-11T10:47:38.803 に答える
0

各行にIDを追加することは可能ですか?次に、IDで行を直接選択し、行を削除しますか?そのようです:

var el = document.GetElementById("RowID_1");
document.removeChild(el);

jQueryはJavascriptの上にあります。javascriptを直接使用する方が速いと思います。

編集:もちろん、次のようなループを作成できます:

for(i=250;i<=300;i++)
{
    var el = document.GetElementById("RowID_" + i);
    document.removeChild(el);  
}

編集2:編集中にテーブルを非表示にして、削除するたびにブラウザが更新されないようにしますか?;)

于 2012-10-11T10:48:47.310 に答える
0

これを試して 。お役に立てば幸いです

$("#myTable tr").slice(250, 300).html('');
于 2012-10-11T11:05:33.020 に答える