のパフォーマンスに関して少し問題がありjQuery.show
ます。この問題は IE8 で発生します (おそらく以下のバージョンでも発生しますが、IE8 に興味があります)。
私はjQueryオブジェクトの配列を持っています。それを呼び出しましょうelements
。私はそれらを見せたいので、私はしました:
for (var i = elements.length - 1; i >= 0; i--) {
elements[i].show();
}
ボトルネックは への呼び出しのようshow
です。配列はすでに生成されているので、時間はかかりません。配列のループも問題になりません。
show
すべての要素を含む新しい jQuery 要素を作成することで、これを 1 回の呼び出しに減らすことを考えました。しかし、これを行う方法がわかりませんでした。でやってみましたjQuery.add
。
var $elements = elements[0];
for (var i = elements.length - 1; i >= 1; i--) {
$elements = $elements.add(elements[i]);
}
$elements.show();
さて、今回は に問題がありそうjQuery.add
です。おそらく、常に新しいオブジェクトを作成するためです。
そこで、私の問題を解決できる 3 つの異なるアプローチを考えました。多分あなたはそれらの1つで私を助けることができます:
add
新しいオブジェクトを返さず、代わりに現在の jQuery 要素に追加するような jQuery メソッドはありますか?- jQuery要素の配列でjQuery要素を作成する簡単で迅速な方法はありますか?
show
配列内のすべての jQuery オブジェクトをより高速に処理する方法はありますか?
質問の 1 つだけに答えるだけで、ここで私を助けることができるでしょう。私の問題は、jqueryがそのメソッドDOM elements
の配列ではなく、常に配列を期待していることです。jQuery elements
よろしくお願いします!
-- の内容について編集elements
ノード (つまり、li
要素) を動的に作成する jstree があります。これらの要素には、data-id
それらを識別するための属性があります。これで、$('li[data-id=xxx]') のようなクエリをいつでも実行できますが、これは非常に遅くなります。代わりに、li
要素が作成されると、それらをオブジェクトのような辞書にキャッシュします (キーはデータ ID、値はノードです)。このオブジェクトから、配列を生成しますelements
。これは非常に高速に発生します。アレイのサイズは最大 4000 ノードです。配列内のすべての jQuery 要素には、DOM 要素 ( li
) が 1 つだけ含まれます。