Tengo una clase .objectque tiene un atributo llamado level. Quiero obtener una lista de todos los valores diferentes de levelen la página para poder seleccionar el más alto.
Si hago algo como:
$(".object").attr("level")
... ¿eso me dará una lista de valores que son los valores del atributo de nivel? Sospecho que no, pero entonces, ¿cómo haces algo así?
Nota: No quiero seleccionar un objeto HTML para su manipulación, ya que es más común, sino que quiero seleccionar valores del atributo.
EDITAR: Para obtener el "nivel" más alto, he hecho esto, pero no parece funcionar. Probaré el otro método sugerido ahora.
var highLevel=0;
$.each(".object[level]", function(i, value) {
if (value>highLevel) {
highLevel=value;
}
});
alert(highLevel);
jquery
css-selectors
Ankur
fuente
fuente

Respuestas:
$(".object").attr("level")simplemente devolverá el atributo del primer.objectelemento.Esto le dará una matriz de todos los
levels:var list = $(".object").map(function(){return $(this).attr("level");}).get();fuente
.get()?getconvierte el objeto jQuery en una matriz regular..get()la matriz primero, luego use la.map()función de flecha más (soporte del navegador: caniuse.com/#search=arrow ) para construir la matriz con un poco de javascript simple:$(".object").get().map(x => x.getAttribute('level'));Primera parte de la pregunta, obtener los valores de los atributos en una matriz. Ver esta pregunta
jQuery obtiene los atributos de origen de img de la lista y los inserta en la matriz
Tu dirías
var levelArray = $('.object').map( function() { return $(this).attr('level'); }).get();Segunda parte de la pregunta, puede utilizar esta técnica para obtener el valor más alto
var maxValue = Math.max.apply( Math, levelArray );fuente
<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>Estoy asumiendo un marcado como este:
<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 mi código, recibo una alerta "1000".
Aquí hay otra solución, que combina varias de las otras respuestas de harpo, lomaxx y 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); });fuente
el selector
$(".object[level]")le dará todos los elementos dom con clase
objecty un atributolevel.Luego puede usar el método .each () para iterar sobre los elementos para obtener el valor más alto
fuente
$(".object[level=something]")donde algo es el valor de atributo que estás buscandoPuede ampliar la funcionalidad de Jquery y agregar su propia implementación 'attrs'.
Agregue las siguientes líneas de código a su archivo JavaScript:
jQuery.fn.extend({ attrs: function (attributeName) { var results = []; $.each(this, function (i, item) { results.push(item.getAttribute(attributeName)); }); return results; } });Ahora puede obtener la lista de valores de nivel llamando a:
$(".object").attrs("level")fuente