95 votes

jQuery - obtient une liste de valeurs d'un attribut à partir d'éléments d'une classe

J'ai une classe .object qui est un attribut appelé level. Je veux obtenir une liste de toutes les différentes valeurs de level sur la page afin que je puisse sélectionner la valeur la plus élevée.

Si je fais quelque chose comme:

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

... qui va me faire une liste de valeurs qui sont les valeurs de l'attribut de niveau? Je pense que non, mais comment pouvez-vous faire quelque chose comme ça?

Remarque: je ne veux pas de sélectionner un objet HTML pour la manipulation comme c'est le plus commun, mais je veux sélectionner des valeurs de l'attribut.

EDIT: afin d'obtenir le plus de "niveau" j'ai fait cela, mais il ne semble pas fonctionner. Je vais essayer l'autre méthode suggérée maintenant.

var highLevel=0;
$.each(".object[level]", function(i, value) {
   if (value>highLevel) {
       highLevel=value;
   }
});

alert(highLevel);

209voto

Kobi Points 65357

$(".object").attr("level") renverra simplement l'attribut du premier élément .object .

Cela vous donnera un tableau de tous les level s:

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

33voto

harpo Points 17399

Première partie de la question, d'obtenir les valeurs d'attribut dans un tableau. Voir cette question

http://stackoverflow.com/questions/2355025/jquery-get-img-source-attributes-from-list-and-push-into-array

Vous dirais

var levelArray = $('.object').map( function() {
    return $(this).attr('level');
}).get();

Deuxième partie de la question , vous pouvez utiliser cette technique pour obtenir la valeur la plus élevée

var maxValue = Math.max.apply( Math, levelArray );

3voto

artlung Points 13433
 <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>
 

Je suppose que le balisage ressemble à ceci:

 <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>
 

Pour mon code, je reçois "1000" alerté.

Voici une autre solution, combinant plusieurs des autres réponses de harpo, lomaxx et 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);
});
 

2voto

lomaxx Points 32540

le sélecteur

 $(".object[level]")
 

vous donnera tous les éléments dom avec la classe object et un attribut level .

Ensuite, vous pouvez simplement utiliser la méthode .each () pour parcourir les éléments afin d’obtenir la valeur la plus élevée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X