2016-09-02 16 views
0

私は最近、HTML文書からいくつかのノードの値を抽出する必要がありました。私は、条件を満たすノードのリストを返すquerySelectorAllを使ってノードを取得しました。私は前にarr.map使用していたので、私は(動作しませんでした)このようにそれを実行しようとしました:なぜquerySelectorAllの結果にマップを使用できないのですか?

var elems = document.querySelectorAll('select option:checked'); 
values = elems.map(function(obj) {return obj.value}); 

私はMDNにドキュメントを読んだとき、私は私ではなく、このようなものを使用していたことを見ました:

var elems = document.querySelectorAll('select option:checked'); 
var values = Array.prototype.map.call(elems, function(obj) { 
    return obj.value; 
}); 

私の質問は、私がquerySelectorAllから取得する配列である場合、私は、他の配列の場合と同様に、なぜ私は、最初の式を使用することはできませんか?

+5

'querySelectorAll'は配列を返しません。' array-like-object'を返します。ドキュメントを参照している場合、完全にそれを読んでください... – Rayon

+2

[___ 'NodeList'は配列ではありません___](https://developer.mozilla.org/en-US/docs/Web/API/NodeList#Why_is_NodeList_not_an_Array) – Rayon

答えて

5

私がquerySelectorAllから得たものが配列の場合、他の配列と同じように、最初の式を使用できないのはなぜですか?

querySelectorAllはは、それがNodeListを返し、配列を返すしません。 MDN(強調鉱山)から

は、セレクタの指定されたグループと一致する(文書のノードの深さ優先プリオーダートラバーサルを使用して)ドキュメント内の要素のリストを返します。 返されるオブジェクトはNodeListです。

NodeListは、そのプロトタイプチェーン内Array.prototypeを持っていないので、配列のメソッドを持っていません。

+0

ええと、私はそれが配列であると仮定しました、私は今NodeListsについて読んでいます。ご回答有難うございます! –

関連する問題