如何以最优雅的方式获取此数组
[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。
如何以最优雅的方式获取此数组
[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的map函数...
var myVals = [];
$('li','ul').map(function(){
myVals.push($(this).attr('value'));
});
它们都同样快速。
http://jsperf.com/testing-stuff
我认为map函数完全没问题.. 只是不能在链式结构中使用。
var vals = $.map($("li[value]"), function(li) {
return $(li).attr("value");
});
var outVal = [];
$('ul li').each(function(idx, el){
outVal.push($(this).attr('value'));
});
说到优雅的代码,我们可以使用Underscore结合jQuery来得到更好的解决方案:
_($('ul li').toArray()).map(function(e) { return e.value })
顺便问一下,我们为什么不放弃Javascript,改用CoffeeScript:
_($('ul li').toArray()).map (e) -> e.value
;-)
$.map
和.map
(类似于flatmap)。但是使用map加1。 - user166390
var values = $.map($("li[value]"), function(li) { return $(li).attr("value"); });
- Alexis