9

私はかなり長い間このトピックについて疑問に思っています。問題の方法は次のとおりです。

  • getElementsByTagName
  • getElementsByClassName
  • getElementsByName
  • querySelectorAll

私の知る限り、これらのDOMメソッドは、フリーズまたはライブを返すことができる唯一のメソッドNodeListsです。これらのメソッドの一部では、順序はW3C仕様で定義されています。たとえば、http://www.w3.orgNodeListsquerySelectorAll

Document、DocumentFragment、およびElementインターフェイスのquerySelectorAll()メソッドは、コンテキストノードのサブツリー内の一致するすべてのElementノードを含むNodeListをドキュメント順に返す必要があります。一致するノードがない場合、メソッドは空のNodeListを返す必要があります。

しかし、私が言及した他の方法について、同様の明確な仕様を見つけることができませんでした。ここでの私の質問は次のとおりです。

  • 結果の定義された順序(おそらくドキュメントの順序)はありますか?
  • これらの仕様は、どの程度信頼性が高く、クロスブラウザで実装されていますか?

完全に明確にするために:

<div>this</div>
<div>is</div>
<div>a demo</div>

// is this always guaranteed to be "<div>is</div>"
document.querySelectorAll('div')[1]
4

1 に答える 1

7

はい。それらはすべてドキュメント順/ツリー順です。

  • getElementsByNameDOMレベル-2-HTML)はNodeList
  • querySelectorAllSelectors APINodeList )は「ドキュメント順」を返します
  • getElementsByTagNameDOM)はHTMLCollection
  • getElementsByClassNameDOM)はHTMLCollection

HTMLCollectionsNodeListsは両方とも持つように指定されています

要素はツリー順に並べ替えられます。

それらがindizeを介してアクセスされるとき。

これらの仕様(リンクされたバージョンは一部の実装よりも新しい場合があります)は、すべてのブラウザーで確実に実装されていると思います。これは主に、ツリーの順序が最も論理的でコーディングが簡単なためです。ただし、ノードの一致が異なるため、一部のブラウザが異なる要素で構成されるリストを返す場合があることに注意する必要がある場合があります。要素のを決定するとき、私はいくつかの癖を考えることができnameました。

于 2012-10-27T18:09:42.340 に答える