2011-08-14 37 views
34

gì là cách thanh lịch nhất để có được mảng nàyjQuery chọn thuộc tính thành một mảng

[10, 20, 30, 40, 50] 

ra khỏi danh sách này

<ul> 
    <li value="10">Item One</li> 
    <li value="20">Item Two</li> 
    <li value="30">Item three</li> 
    <li value="40">Item Four</li> 
    <li value="50">Item Five</li> 
</ul> 

sử dụng jQuery.

Trả lời

56

**** chỉnh sửa ****

ok chiếc găng tay đã được ném xuống ...

var elements = (document.getElementsByTagName('li')); 
var vals = []; 
for(var i=0;typeof(elements[i])!='undefined';vals.push(elements[i++].getAttribute('value'))); 

không có thư viện 3 dòng mã ...

epicly nhanh hơn

enter image description here


var myVals = []; 
$('li','ul').each(function(){ 
    myVals.push($(this).attr('value')); 
}); 

và sử dụng chức năng bản đồ jquery của ...

var myVals = []; 
$('li','ul').map(function(){ 
    myVals.push($(this).attr('value')); 
}); 

và họ đều bình đẳng càng nhanh .. http://jsperf.com/testing-stuff enter image description here

+0

Có thể sử dụng ['map'] (http://api.jquery.com/map/) trong trường hợp này không? –

+0

+1, nhanh hơn tôi 39 giây. :) –

+0

bản đồ sẽ không thực sự có ý nghĩa ... khi bạn chỉ trích xuất các giá trị chứ không phải các phần tử DOM – samccone

7
var outVal = []; 
$('ul li').each(function(idx, el){ 
    outVal.push($(this).attr('value')); 
}); 
+1

+1 cho chậm hơn 39 giây so với tôi. :) – samccone

+0

ha nhưng mỏ thì nhanh hơn! http: // jsperf.com/comparison-jquery-selectors – samccone

4

Nói mã thanh lịch , chúng tôi có thể có giải pháp tốt hơn bằng cách sử dụng dấu gạch dưới kết hợp với jQuery:

_($('ul li').toArray()).map(function(e) { return e.value }) 

Và trong khi chúng tôi đang ở đó, tại sao không đổ Javascript cho CoffeeScript:

_($('ul li').toArray()).map (e) -> e.value 

;-)

+0

jQuery đã có '$ .map' và' .map' (hoạt động sorta như flatmap). Nhưng +1 để sử dụng bản đồ. –

+0

Có, tôi quên rằng jQuery đã có một, tôi hoàn toàn nối vào gạch dưới có vẻ như! –

+0

ha @nicolas ... tốt đẹp tôi đã nhận của tôi xuống đến 3 dòng và không có thư viện :) – samccone

25

Tôi nghĩ rằng bản đồ chỉ hoạt động tốt .. không phải trong chuỗi.

var vals = $.map($("li[value]"), function(li) { 
    return $(li).attr("value"); 
}); 
+0

ok @pst đã nhận được 3 dòng mã và không có thư viện nào :) – samccone

+6

@samccone thú vị rằng "không có thư viện" nào được ưu tiên cho một câu hỏi đặc biệt yêu cầu giải pháp "sử dụng jquery". – natedavisolds

+0

Đây cũng là "thanh lịch nhất" như câu hỏi đặt ra. Tốc độ là không thích hợp cho một chạy nhỏ như vậy, nhưng vẫn còn tốt đẹp để xem. – Ael

Các vấn đề liên quan