2013-07-05 6 views
14

は、この与えられた:ここ

<a href="1">1</a> 
<a href="2">2</a> 

は、hrefの値の配列を返す関数です:

e = $('a').map(function(v) { return $(this).attr('href'); }); 
console.log(e); 

をしかし、それは

["1", "2", prevObject: x.fn.x.init[2], context: document, jquery: "1.10.2", constructor: function, init: function…] 

どのように私は返すようにこれを変更することができますを提供します生の配列["1"、 "2"]?

+0

をあなたの 'console.log'が指摘するように、それらはあなたのhrefの値ではありません。 –

+2

だからこそ、コンソール出力を完全に信頼するべきではない(少なくとも 'console.log'、' console.dir'はうまくいくはずです)。 jQueryオブジェクトは*配列のような*オブジェクトなので、 'console.log'は配列として表示します。他のブラウザでは異なる出力が表示されることがあります。 –

+0

OKフェアコール。生の配列を返すためにこれを行う方法に関する提案はありますか? (Davidのポイントを反映するように変更しました) – user537339

答えて

28

それはjQuery.fn.mapは新しいjQueryオブジェクトを返すので、あなたは、配列を取得するためにjQuery.fn.getを使用すべきである:あなたがソースコードを見てみると

var a = $('a').map(function(v, node) { 
    // v is the index in the jQuery Object, 
    // you would maybe like to return the domNode or the href or something: 
    // return node.href; 

    return v; 
}).get(); // <-- Note .get() converts the jQuery Object to an array 

マイクロ最適化をjQuery.fn.getあなたはjQuery.fn.toArrayを指し示すことがわかります:

function (num) { 
    return num == null ? 

     // Return a 'clean' array 
     this.toArray() : 

     // Return just the object 
     (num < 0 ? this[ this.length + num ] : this[ num ]); 
} 

だから、あなたも呼び出すことができます。

$('a').map(...).toArray(); 
関連する問題