获得此数组最优雅的方法是什么
[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。
答案 0 :(得分:60)
****编辑****
好的,手套已被抛下......
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的地图功能...
var myVals = [];
$('li','ul').map(function(){
myVals.push($(this).attr('value'));
});
他们都同样快...... http://jsperf.com/testing-stuff
答案 1 :(得分:27)
我认为地图的效果很好..只是不在链中。
var vals = $.map($("li[value]"), function(li) {
return $(li).attr("value");
});
答案 2 :(得分:8)
var outVal = [];
$('ul li').each(function(idx, el){
outVal.push($(this).attr('value'));
});
答案 3 :(得分:5)
说到优雅的代码,我们可以使用Underscore结合jQuery获得更好的解决方案:
_($('ul li').toArray()).map(function(e) { return e.value })
虽然我们正在努力,但为什么不为CoffeeScript转储Javascript:
_($('ul li').toArray()).map (e) -> e.value
- )