2013-07-05 6 views
14

Vor diesem Hintergrund:

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

Hier ist eine Funktion ein Array von href Werte zurück:

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

Aber es gibt

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

Wie kann ich das eine nur zurückkehren ändern rohe Anordnung ["1", "2"]?

+0

Als Ihr 'console.log' weist darauf hin, das sind nicht Ihre href Werte. –

+2

Deshalb sollten Sie der Konsolenausgabe * niemals * absolut vertrauen (mindestens 'console.log',' console.dir' sollte in Ordnung sein). Da ein jQuery-Objekt ein * array-ähnliches * Objekt ist, zeigt 'console.log' es als Array an. Andere Browser zeigen möglicherweise eine andere Ausgabe an. –

+0

OK, fairer Anruf. Irgendwelche Vorschläge, wie Sie ein unformatiertes Array zurückgeben können? (Habe meine Frage geändert, um Davids Punkt widerzuspiegeln) – user537339

Antwort

28

Es ist, weil jQuery.fn.map ein neues jQuery-Objekt zurückgibt, sollten Sie jQuery.fn.get verwenden, um ein Array zu erhalten:

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 

Micro-Optimierung:

Wenn Sie sich den Quellcode sucht jQuery.fn.get können Sie sehen, dass es Sie auf jQuery.fn.toArray zeigt:

function (num) { 
    return num == null ? 

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

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

So können Sie auch anrufen:

$('a').map(...).toArray();