jQuery - получить список значений атрибута из элементов класса

У меня есть класс .object с атрибутом level. Я хочу получить список всех различных значений level на странице, чтобы я мог выбрать самое высокое из них.

Если я сделаю что-то вроде:

$(".object").attr("level")

... это даст мне список значений, которые являются значениями атрибута уровня? Я подозреваю, что нет, но как тогда делать что-то подобное?

Примечание. Я не хочу выбирать объект HTML для манипуляции, как это обычно бывает, а хочу выбирать значения атрибута.

РЕДАКТИРОВАТЬ: Чтобы получить наивысший «уровень», я сделал это, но, похоже, это не работает. Сейчас я попробую другой предложенный метод.

var highLevel=0;
$.each(".object[level]", function(i, value) {
   if (value>highLevel) {
       highLevel=value;
   }
});

alert(highLevel);

person Ankur    schedule 02.05.2010    source источник
comment
@Ankur, вы должны выбрать один из них в качестве ответа на этот вопрос   -  person Nathan Koop    schedule 13.11.2012


Ответы (5)


$(".object").attr("level") просто вернет атрибут первого первого .object элемента.

Это даст вам массив всех level:

var list = $(".object").map(function(){return $(this).attr("level");}).get();
person Kobi    schedule 02.05.2010
comment
Что делает .get()? - person Yuji 'Tomita' Tomita; 04.10.2012
comment
@Yuji - get преобразует объект jQuery в обычный массив. - person Kobi; 04.10.2012
comment
@MandeepJain: Как пометить ответ как «правильный»? Возможно, он не был отмечен как «принятый», но более 100 человек проголосовали за него как «полезный», и для меня этого достаточно! - person Michael Scheper; 06.10.2016
comment
Отличный ответ. Для меня немного более интуитивно понятным / понятным является сначала .get() массив, а затем функция стрелки .map() плюс (поддержка браузера: caniuse.com/#search=arrow), чтобы создать массив с помощью небольшого простого JavaScript: $(".object").get().map(x => x.getAttribute('level')); - person elPastor; 26.02.2019

Первая часть вопроса, получение значений атрибутов в массив. Посмотреть этот вопрос

jQuery получает атрибуты источника img из списка и вставляет в массив

Вы бы сказали

var levelArray = $('.object').map( function() {
    return $(this).attr('level');
}).get();

Во второй части вопроса вы можете использовать этот метод, чтобы получить максимальную ценность

var maxValue = Math.max.apply( Math, levelArray );
person harpo    schedule 02.05.2010

<script type="text/javascript"> 
var max = 0;
jQuery(document).ready(function(){ 
    jQuery('.object[level]').each(function(){
        var num = parseInt($(this).attr('level'), 10);
        if (num > max) { max = num; }
    });
    alert(max);
});
</script>

Я предполагаю такую ​​разметку:

<div class="object" level="1">placeholder</div>
<div class="object" level="10">placeholder</div>
<div class="object" level="20">placeholder</div>
<div class="object" level="1000">placeholder</div>
<div class="object" level="40">placeholder</div>
<div class="object" level="3">placeholder</div>
<div class="object" level="5">placeholder</div>

Для моего кода я получаю предупреждение "1000".

Вот еще одно решение, объединяющее несколько других ответов от harpo, lomaxx и Kobi:

jQuery(document).ready(function(){ 
    var list = $(".object[level]").map(function(){
        return parseInt($(this).attr("level"), 10);
    }).get();
    var max = Math.max.apply( Math, list ); 
    alert(max);
});
person artlung    schedule 02.05.2010

селектор

$(".object[level]")

предоставит вам все элементы dom с классом object и атрибутом level.

Затем вы можете просто использовать метод .each () для перебора элементов, чтобы получить максимальное значение.

person lomaxx    schedule 02.05.2010
comment
$(".object[level=something]") where something - это значение атрибута, которое вы ищете - person James; 30.06.2014

Вы можете расширить функциональность Jquery и добавить свою собственную реализацию attrs.

Добавьте следующие строки кода в свой файл JavaScript:

jQuery.fn.extend({
    attrs: function (attributeName) {
        var results = [];
        $.each(this, function (i, item) {
            results.push(item.getAttribute(attributeName));
        });
        return results;
    }
});

Теперь вы можете получить список значений уровней, позвонив:

$(".object").attrs("level")
person Albert Waninge    schedule 24.05.2017