todos - jQuery: obtén una lista de valores de un atributo de elementos de una clase
seleccionar varios elementos jquery (5)
Primera parte de la pregunta, obteniendo los valores de los atributos en una matriz. Ver esta pregunta
jQuery obtiene atributos de origen img de list y push in array
Tu dirías
var levelArray = $(''.object'').map( function() {
return $(this).attr(''level'');
}).get();
Segunda parte de la pregunta, puede usar esta técnica para obtener el valor más alto
var maxValue = Math.max.apply( Math, levelArray );
Tengo un objeto de clase que tiene un atributo llamado level
. Quiero obtener una lista de todos los diferentes valores de level
en la página para poder seleccionar el más alto.
Si hago algo como:
$(".object").attr("level")
... ¿me proporcionará una lista de valores que son los valores del atributo de nivel? Sospecho que no, pero ¿cómo haces algo así?
Nota: No quiero seleccionar un objeto HTML para la manipulación, como es más común, prefiero seleccionar los valores del atributo.
EDITAR: Para obtener el "nivel" más alto, lo he hecho, pero parece que no funciona. Voy a probar el otro método sugerido ahora.
var highLevel=0;
$.each(".object[level]", function(i, value) {
if (value>highLevel) {
highLevel=value;
}
});
alert(highLevel);
Puede extender 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:
$(".object").attrs("level")
el selector
$(".object[level]")
le dará todos los elementos dom con object
clase y un level
atributo.
Entonces puedes usar el método .each () para iterar sobre los elementos para obtener el valor más alto
$(".object").attr("level")
simplemente devolverá el atributo de primero el primer elemento .object
.
Esto te proporcionará una matriz de todos los level
s:
var list = $(".object").map(function(){return $(this).attr("level");}).get();
<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>
Asumo 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 me avisan "1000".
Aquí hay otra solución, combinando 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);
});