jQuery将属性select到一个数组中

什么是最优雅的方式来获得这个数组

[10, 20, 30, 40, 50] 

在这个列表中

 <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> 

使用jQuery。

****编辑****

好的,手套已经被扔下去了…

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

没有库3行代码…

史诗更快

在这里输入图像说明


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

并使用jQuery的地图function…

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

他们都是一样的快速.. http://jsperf.com/testing-stuff 在这里输入图像说明

我认为,地图工作得很好..只是不在链中。

 var vals = $.map($("li[value]"), function(li) { return $(li).attr("value"); }); 
 var outVal = []; $('ul li').each(function(idx, el){ outVal.push($(this).attr('value')); }); 

说到优雅的代码,我们可以得到一个更好的解决scheme,使用Underscore结合jQuery:

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

虽然我们在这里,为什么不把JavaScript转储为CoffeeScript:

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

😉