22

HTMLCollectionは実際には配列ではないことを理解しています。そうでない場合は、配列として定義されます。isArray()を呼び出すヘルプ関数を使用して、オブジェクトが配列であるかどうかを検出します。私はあちこちでこの小さなヘルパーを使用していますが、htmlCollectionをチェックするときにfalseが返されるという問題が発生しています。

var isArray: function(obj) {
    var type = Function.prototype.call.bind( Object.prototype.toString );
    return type(obj) === '[object Array]' || type(obj) === '[object HTMLCollection]';
}

このヘルパー関数内のhtmlCollectionタイプをチェックして、それが配列と同じものであると想定するのは間違っているでしょうか?何が違うのですか?javascriptオブジェクトとは対照的なhtml要素以外。

4

2 に答える 2

28

いいえ、HTMLCollectionではなく、Arrayです。

数値プロパティやプロパティなどの配列のような特性があり.lengthますが、からは継承されませんArray.prototype。したがって、標準的な方法がないため、Array異なると見なす必要があります。

もう1つの重要な違いはHTMLCollection、「ライブ」コレクションです。これは、DOMが更新されると更新されることを意味します。そのノードの1つをDOMから削除すると、そのノードはHTMLCollection自動的に削除されます。

于 2012-10-07T15:33:19.910 に答える
7

配列変換を検討している場合は、次の投稿を参照してください。

HTMLCollectionを配列に変換する最も効率的な方法

彼らはいくつかの方法について話し合い、選択した回答の解決策は私が経験した状況でも機能しました。

于 2013-04-24T22:07:30.650 に答える