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


86

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

Якщо я роблю щось на зразок:

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

... це отримає мені список значень, які є значеннями атрибута рівня? Я підозрюю, що ні, але як тоді ви робите щось подібне?

Примітка: Я не хочу вибирати HTML-об'єкт для маніпуляцій, як це частіше, я хочу вибирати значення атрибута.

EDIT: Для того, щоб отримати найвищий "рівень", я це зробив, але, здається, це не спрацьовує. Зараз я спробую інший запропонований метод.

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

alert(highLevel);

5
@Ankur, вам слід вибрати один із них як відповідь на це запитання
Nathan Koop

Відповіді:


195

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

Це дасть вам масив усіх levels:

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

6
Що .get()робити?
Юдзі 'Томіта' Томіта

21
@Yuji - getперетворює об'єкт jQuery у звичайний масив.
Кобі

@MandeepJain: Як можна позначити відповідь як "правильну"? Можливо, цей не був позначений як "прийнятий", але понад 100 людей проголосували за "корисний", і це досить добре для мене!
Michael Scheper

1
Чудова відповідь. Трохи більш інтуїтивно зрозумілим / чистим для мене є .get()спочатку масив, а потім скористайтеся .map()функцією плюс стрілка (підтримка браузера: caniuse.com/#search=arrow ) для побудови масиву з невеликим простим javascript:$(".object").get().map(x => x.getAttribute('level'));
elPastor

27

Перша частина запитання, отримання значень атрибутів у масив. Дивіться це питання

jQuery отримує атрибути джерела img зі списку та вписує їх у масив

Ви б сказали

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

Друга частина запитання, ви можете використовувати цей прийом, щоб отримати найвище значення

var maxValue = Math.max.apply( Math, levelArray );

3
<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);
});

2

селектор

$(".object[level]")

надасть вам усі елементи dom з класом objectта атрибутом level.

Тоді ви можете просто використовувати метод .each () для перебору елементів, щоб отримати найвище значення


$(".object[level=something]") де щось - це те значення атрибута, яке ви шукаєте
Джеймс

0

Ви можете розширити функціональність 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")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.