Подтвердить что ты не робот

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.

4b9b3361

Ответ 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