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
😉