2010-05-02 15 views
70

Tengo una clase .object que tiene un atributo llamado level. Quiero obtener una lista de todos los valores diferentes de level en la página para poder seleccionar la más alta.jQuery - obtener una lista de valores de un atributo de elementos de una clase

Si hago algo como:

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

... será que me obtener una lista de valores que son los valores del atributo de nivel? Sospecho que no, pero ¿cómo haces algo así?

Nota: No deseo seleccionar un objeto HTML para la manipulación, como es más común, prefiero seleccionar los valores del atributo.

EDITAR: Con el fin de obtener el "nivel" más alto que he hecho esto, 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); 
+0

ver las actualizaciones! –

+4

@Ankur debe seleccionar uno de estos como la respuesta a esta pregunta –

Respuesta

156

$(".object").attr("level") se acaba de devolver el atributo del primer elemento de la primera .object.

Esto le dará una matriz de todas level s:

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

¿Qué hace el '.get()' hacer? –

+16

@Yuji - ['get'] (http://api.jquery.com/get/) convierte el objeto jQuery en una matriz normal. – Kobi

+5

¿Por qué no se ha marcado como correcto? –

2

el selector

$(".object[level]") 

le dará todos los elementos DOM con clase object y un atributo level.

a continuación, puedes usar el método each() para iterar sobre los elementos para obtener el valor más alto

+0

'$ (". Object [level = algo] ")' donde algo es qué valor de atributo estás buscando – James

2
<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 de esta manera:

<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, 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); 
}); 
0

Puede extend the functionality of Jquery y una su propia implementación '' attrs.

Añadir 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 los valores de nivel llamando al:

$(".object").attrs("level") 
Cuestiones relacionadas