У меня есть класс .object
с атрибутом level
. Я хочу получить список всех различных значений level
на странице, чтобы выбрать самое высокое.
Если я сделаю что-то вроде:
$(".object").attr("level")
... это даст мне список значений, которые являются значениями атрибута уровня? Я подозреваю, что нет, но как тогда делать что-то подобное?
Примечание. Я не хочу выбирать объект HTML для манипуляции, как это обычно бывает, а хочу выбрать значения атрибута.
РЕДАКТИРОВАТЬ: Чтобы получить наивысший «уровень», я сделал это, но, похоже, это не работает. Сейчас я попробую другой предложенный метод.
var highLevel=0;
$.each(".object[level]", function(i, value) {
if (value>highLevel) {
highLevel=value;
}
});
alert(highLevel);
jquery
css-selectors
Анкур
источник
источник
Ответы:
$(".object").attr("level")
просто вернет атрибут первого первого.object
элемента.Это даст вам массив всех
level
s:var list = $(".object").map(function(){return $(this).attr("level");}).get();
источник
.get()
?get
преобразует объект jQuery в обычный массив..get()
сначала массив, затем используйте.map()
функцию стрелки плюса (поддержка браузера: caniuse.com/#search=arrow ), чтобы создать массив с небольшим простым javascript:$(".object").get().map(x => x.getAttribute('level'));
Первая часть вопроса, получение значений атрибутов в массив. Посмотреть этот вопрос
jQuery получает исходные атрибуты img из списка и вставляет в массив
Вы бы сказали
var levelArray = $('.object').map( function() { return $(this).attr('level'); }).get();
Вторая часть вопроса, вы можете использовать эту технику, чтобы получить максимальную ценность
var maxValue = Math.max.apply( Math, levelArray );
источник
<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); });
источник
селектор
$(".object[level]")
предоставит вам все элементы dom с классом
object
и атрибутомlevel
.Затем вы можете просто использовать метод .each () для перебора элементов, чтобы получить максимальное значение.
источник
$(".object[level=something]")
где что-то - какое значение атрибута вы ищетеВы можете расширить функциональность 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")
источник