Eu tenho uma classe .object
que tem um atributo chamado level
. Quero obter uma lista de todos os diferentes valores de level
na página para poder selecionar o mais alto.
Se eu fizer algo como:
$(".object").attr("level")
... isso me dará uma lista de valores que são os valores do atributo de nível? Eu suspeito que não, mas então como você faz algo assim?
Nota: Não quero selecionar um objeto HTML para manipulação, como é mais comum, em vez disso, quero selecionar valores do atributo.
EDITAR: A fim de obter o "nível" mais alto, fiz isso, mas não parece funcionar. Vou tentar o outro método sugerido agora.
var highLevel=0;
$.each(".object[level]", function(i, value) {
if (value>highLevel) {
highLevel=value;
}
});
alert(highLevel);
jquery
css-selectors
Ankur
fonte
fonte
Respostas:
$(".object").attr("level")
retornará apenas o atributo do primeiro.object
elemento.Isso fornecerá a você uma matriz de todos os
level
s:var list = $(".object").map(function(){return $(this).attr("level");}).get();
fonte
.get()
faz?get
converte o objeto jQuery em um array regular..get()
a matriz primeiro, em seguida, use a.map()
função de seta mais (suporte para navegador: caniuse.com/#search=arrow ) para construir a matriz com um pouco de javascript simples:$(".object").get().map(x => x.getAttribute('level'));
Primeira parte da pergunta, colocando os valores dos atributos em um array. Veja esta questão
jQuery obtém atributos de origem img da lista e empurra para o array
Você diria
var levelArray = $('.object').map( function() { return $(this).attr('level'); }).get();
Segunda parte da pergunta, você pode usar essa técnica para obter o valor mais alto
var maxValue = Math.max.apply( Math, levelArray );
fonte
<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>
Estou assumindo uma marcação como esta:
<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>
Para o meu código, recebo um alerta de "1000".
Aqui está outra solução, combinando várias das outras respostas de harpo, lomaxx e 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); });
fonte
o seletor
$(".object[level]")
lhe dará todos os elementos dom com classe
object
e um atributolevel
.Em seguida, você pode apenas usar o método .each () para iterar os elementos e obter o valor mais alto
fonte
$(".object[level=something]")
onde algo é o valor de atributo que você está procurandoVocê pode estender a funcionalidade do Jquery e adicionar sua própria implementação de 'atributos'.
Adicione as seguintes linhas de código ao seu arquivo JavaScript:
jQuery.fn.extend({ attrs: function (attributeName) { var results = []; $.each(this, function (i, item) { results.push(item.getAttribute(attributeName)); }); return results; } });
Agora você pode obter a lista de valores de nível chamando:
$(".object").attrs("level")
fonte