9

私が書いたサンプルコードの一部で

var as = toArray(document.getElementsByClassName("false")).filter(function (el) {
    return el.tagName === "A";
});

そして、私はそれを置き換えることができると考えていました

var as = document.querySelectorAll("a.false");

次の事実を読んだ後

  • ふりをするブラウザーのサポートは問題ではありません (シムとポリフィルがあります)。
  • すべての要素を取得するためにQSAを使用する必要があるという一般的なjQueryの考え方にふりをしてください。
  • せっかちなのでqsa代わりに書きます。document.querySelectorAll

質問:通常の方法よりも QSA を優先する必要があるのはどのような場合ですか?

より優れたメソッド (byTagName、byClassName、byId) があるため、実行qsa("a")または実行が間違っていることは明らかです。qsa(".class")qsa("#id")

それqsa("div > p.magic")が賢明なユースケースであることも明らかです。

質問:しかしqsa("tagName.class")、QSA の適切な使用例はありますか?

さらに別として、と呼ばれるものもありますNodeIterator

QSA と NodeIteratorについて質問しました

4

3 に答える 3

2

セレクターが複雑なためにgEBI、gEBN、gEBCNが機能しない場合は、QSAを使用する必要があります。

QSAとDOMの解析は好みの問題であり、返されたデータセットをどのように処理するかが問題になります。

于 2011-11-07T04:11:38.063 に答える
1

ブラウザのサポートが問題にならないのであれば、私はどこでもそれを使用します. 1 つしか使用できないのに、なぜ 4 つの異なるメソッド (...byId、...byTagName、...byClassName) を使用するのでしょうか。

QSA は遅いようですが(... byId )、それでも数ミリ秒以下しかかかりません。ほとんどの場合、数回しか呼び出さないので問題ありません。速度のボトルネックにぶつかったときは、いつでも QSA を適切な他のものに置き換えることができます。

于 2011-10-29T20:44:31.357 に答える
0

私はあなたがいじるためにいくつかのテストを設定しました。QSA はかなり遅いようです。でも、そこまで呼ばないなら問題ないはずです。

http://jsfiddle.net/mxZq3/

編集 - jsperf バージョン

http://jsperf.com/qsa-vs-regular-js

于 2011-10-29T20:52:54.327 に答える