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.
Ответы
Ответ 1
**** изменить ****
ok перчатка была сброшена вниз...
var elements = (document.getElementsByTagName('li'));
var vals = [];
for(var i=0;typeof(elements[i])!='undefined';vals.push(elements[i++].getAttribute('value')));
нет библиотеки 3 строки кода...
эпично быстрее
![enter image description here]()
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
![enter image description here]()
Ответ 2
Я думаю, что карта работает нормально... просто не в цепочке.
var vals = $.map($("li[value]"), function(li) {
return $(li).attr("value");
});
Ответ 3
var outVal = [];
$('ul li').each(function(idx, el){
outVal.push($(this).attr('value'));
});
Ответ 4
Говоря об элегантном коде, мы можем получить лучшее решение, используя Underscore в сочетании с jQuery:
_($('ul li').toArray()).map(function(e) { return e.value })
И пока мы на нем, почему бы не сбросить Javascript для CoffeeScript:
_($('ul li').toArray()).map (e) -> e.value
; -)
Ответ 5
Сравнение в большинстве популярных ответов несправедливо.
Справедливое сравнение: https://jsperf.com/testing-stuff/20