J'ai une classe .object
qui a un attribut appelé level
. Je souhaite obtenir une liste de toutes les différentes valeurs de level
sur la page afin de pouvoir sélectionner la plus élevée.
Si je fais quelque chose comme:
$(".object").attr("level")
... cela me donnera-t-il une liste de valeurs qui sont les valeurs de l'attribut level? Je soupçonne que non, mais alors comment faire quelque chose comme ça?
Remarque: je ne veux pas sélectionner un objet HTML pour la manipulation comme c'est plus courant, je veux plutôt sélectionner les valeurs de l'attribut.
EDIT: Afin d'obtenir le plus haut "niveau", j'ai fait cela, mais cela ne semble pas fonctionner. J'essaierai maintenant l'autre méthode suggérée.
var highLevel=0;
$.each(".object[level]", function(i, value) {
if (value>highLevel) {
highLevel=value;
}
});
alert(highLevel);
jquery
css-selectors
Ankur
la source
la source
Réponses:
$(".object").attr("level")
retournera simplement l'attribut du premier.object
élément.Cela vous donnera un tableau de tous les
level
s:var list = $(".object").map(function(){return $(this).attr("level");}).get();
la source
.get()
?get
convertit l'objet jQuery en un tableau régulier..get()
le tableau, puis utilisez la.map()
fonction de flèche plus (prise en charge du navigateur: caniuse.com/#search=arrow ) pour créer le tableau avec un peu de javascript:$(".object").get().map(x => x.getAttribute('level'));
Première partie de la question, obtenir les valeurs d'attribut dans un tableau. Voir cette question
jQuery récupère les attributs source img de la liste et les pousse dans le tableau
Tu 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 );
la source
<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 un balisage comme celui-ci:
<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 une alerte "1000".
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); });
la source
le sélecteur
$(".object[level]")
vous donnera tous les éléments dom avec une classe
object
et un attributlevel
.Ensuite, vous pouvez simplement utiliser la méthode .each () pour parcourir les éléments pour obtenir la valeur la plus élevée
la source
$(".object[level=something]")
où quelque chose est la valeur d'attribut que vous recherchezVous pouvez étendre les fonctionnalités de Jquery et ajouter votre propre implémentation «attrs».
Ajoutez les lignes de code suivantes à votre fichier JavaScript:
jQuery.fn.extend({ attrs: function (attributeName) { var results = []; $.each(this, function (i, item) { results.push(item.getAttribute(attributeName)); }); return results; } });
Vous pouvez maintenant obtenir la liste des valeurs de niveau en appelant:
$(".object").attrs("level")
la source