jQuery フィルターや独自の再帰降下関数など、いくつかのオプションを試してみましたが、これまでの結果には満足していません。
掘り下げて、コードをどれだけ効率的に作成できるかを確認します。しかし、他の誰かがこれを行い、良い仕事をしたに違いありません。
では、dom ツリーを検索する最も効率的な方法は何ですか? たとえば、( /.*google.*/
)に一致する src プロパティを持つすべての要素を見つけたいとします。
jQuery フィルターや独自の再帰降下関数など、いくつかのオプションを試してみましたが、これまでの結果には満足していません。
掘り下げて、コードをどれだけ効率的に作成できるかを確認します。しかし、他の誰かがこれを行い、良い仕事をしたに違いありません。
では、dom ツリーを検索する最も効率的な方法は何ですか? たとえば、( /.*google.*/
)に一致する src プロパティを持つすべての要素を見つけたいとします。
このようなもの。
$("[src*='/google/']", "#rootnode")
また
$("#rootnode [src*='/google/']")
このテストケースを参照してください(統計によると、最初のセレクターは2番目のセレクターの14倍高速で、まったく同じセレクターです)
http://jsperf.com/test-selectorfidd123
理由を知りたいですか?jQuery は、2 番目のセレクターを使用する場合、検出できる要素ごとに各要素をループ処理する必要があります。最初のものを使用すると、jQuery はroot
、ヒアルキーの最上位ノードを使用するノードを探します。そして、それが必要ではない他のすべてのDIVS
cus をループしません。
数か月前、私はさらにいくつかのテストを行いました。CSS 内で実行できるセレクターを使用する場合。jQuery はquerySelector
ネイティブ ライブラリから使用できます。:selected
ただし、またはのような特別なセレクターを使用する場合:nth-child
、jQuery は Javascript を使用してこれらの要素をループする必要があります。その場合、次のようにする方がよいでしょう: (ここで、jQuery はquerySelector
最初の部分に使用し、JS は.find
$("#native").find(":selected"); is faster than $("#native :selected");
現在、90% 以上のブラウザーがネイティブ コードをサポートdocument.querySelectorAll(..)
していると思います。document.querySelector(..)
以下を使用できるはずです。
document.querySelectorAll('[src*="/google/"]');
これは、JavaScript コードから単独で作成されたものよりも高速です。jQuery も利用できる場合は、これを使用する必要があります。
効率的とは何を意味するかによって異なります。読みやすいように「エレガント」を意味する場合は、Nielsが正しい. 速度の点で効率的であるという意味であれば、jQuery の使い方が間違っています。
はい、言及されている他の方法も機能しますが、おそらくより良い方法です。ページに要素が 12 個しかなくても、それで問題ないかもしれません。しかし、100 人、または 1,000 人になったらどうしますか? これらすべての要素を検索するには、非常にコストがかかります。
尋ねるべき質問は次のとおりです。
これらの要素はどのように作成されていますか? 後で作成するときに必要になるものにマークを付けるにはどうすればよいですか。