2017-06-23 13 views
2

私は2つの異なる要素にgetElementsByClassNameを呼び出すとき、私は結果に矛盾のまわりで私の頭をラップに苦労しています:活字体の戻り値の型()

let section:HTMLElement = document.getElementById("mainSection"); 

// This returns NodeListOf<Element> 
let blah1 = section.getElementsByClassName("blah"); 

// This returns HTMLCollectionOf<Element> 
let blah2 = document.getElementsByClassName("blah"); 

は、次のコードを考えてみましょう

sectionでメソッドを呼び出すと、NodeListが返されますが、ドキュメントで呼び出すと、HTMLCollectionと表示されます。

MDN Documentationに基づいて、両方ともHTMLCollectionを返すべきではありませんか?

答えて

2

オブジェクトには有効なHTML要素のみが含まれています。これは標準による保証です。

ただし、HTML要素(selection)には他のHTML要素やノードが含まれていてもかまいません(プレーンテキストはノードですが、Javascript文書では)。

NodeListとHTMLCollectionはほぼ同じですが、従来のオブジェクト指向言語を使用すると、HTMLListはNodeListを拡張します。つまり、NodeListができるすべての処理を実行できますが、namedItemメソッドもあります。

+0

「HTMLElements」に無効なHTMLノードが含まれることがあることを理解します。しかし、もし私が 'getElementsByClassName()'を使っているのであれば、クラスに合った有効なHTML要素しか得られませんか?クラス名で要素を検索するメソッドを明示的に呼び出すと、返されたプレーンテキストを取得できませんでした。 – Marquizzo

+1

'getElementsByClassName'は任意の要素で実行すると、HTML要素ではないSVG要素も返すことができます –

関連する問題