2013-07-05 34 views
14

Với này:

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

Đây là một hàm trả về một mảng các giá trị href:

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

Nhưng nó mang lại cho

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

Làm thế nào tôi có thể sửa đổi này để chỉ trả lại một mảng thô ["1", "2"]?

+0

Do 'console.log' bạn chỉ ra, những người không phải là giá trị href của bạn. –

+2

Đó là lý do tại sao bạn nên * không bao giờ * hoàn toàn tin tưởng vào đầu ra của bàn điều khiển (ít nhất là 'console.log',' console.dir' sẽ ổn). Vì đối tượng jQuery là một đối tượng * giống như mảng *, 'console.log' hiển thị nó dưới dạng mảng. Trình duyệt khác có thể hiển thị đầu ra khác. –

+0

Cuộc gọi công bằng OK. Bất kỳ đề xuất về cách làm điều này để trả về một mảng thô? (Đã sửa đổi câu hỏi của tôi để phản ánh quan điểm của David) – user537339

Trả lời

28

Đó là vì jQuery.fn.map trả về một jQuery Object mới, bạn nên sử dụng jQuery.fn.get để có được một mảng:

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 tối ưu hóa:

Nếu bạn nhìn vào mã nguồn của jQuery.fn.get bạn có thể thấy rằng nó trỏ bạn đến 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 ]); 
} 

Vì vậy, bạn cũng có thể gọi:

$('a').map(...).toArray(); 
Các vấn đề liên quan