it-swarm.com.de

jQuery - Ruft eine Liste von Attributwerten aus Elementen einer Klasse ab

Ich habe eine Klasse .object, die ein Attribut namens level hat. Ich möchte eine Liste aller verschiedenen Werte von level auf der Seite erhalten, damit ich den höchsten auswählen kann.

Wenn ich so etwas mache:

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

... wird mir das eine Liste von Werten geben, die die Werte des Stufenattributs sind? Ich vermute nicht, aber wie macht man so etwas?

Hinweis: Ich möchte kein HTML-Objekt zur Manipulation auswählen, da dies üblicher ist, sondern ich möchte Werte des Attributs auswählen.

EDIT: Um das höchste "Niveau" zu erreichen, habe ich das gemacht, aber es scheint nicht zu funktionieren. Ich werde jetzt die andere vorgeschlagene Methode ausprobieren.

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

alert(highLevel);
76
Ankur

$(".object").attr("level") gibt nur das Attribut des ersten .object-Elements zurück.

Dadurch erhalten Sie ein Array aller levels:

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

Erster Teil der Frage: Abrufen der Attributwerte in ein Array. Siehe diese Frage

jQuery Img-Quellattribute aus Liste holen und in Array verschieben

Du würdest sagen

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

Im zweiten Teil der Frage können Sie diese Technik verwenden, um den höchsten Wert zu erhalten.

var maxValue = Math.max.apply( Math, levelArray );
26
harpo
<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>

Ich gehe davon aus, dass das Markup so ist:

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

Für meinen Code werde ich auf "1000" aufmerksam gemacht.

Hier ist eine andere Lösung, die einige der anderen Antworten von Harpo, Lomaxx und Kobi kombiniert:

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);
});
3
artlung

der Wahlschalter

$(".object[level]")

gibt Ihnen alle dom-Elemente mit der Klasse object und einem Attribut level.

Dann können Sie einfach die .each () - Methode verwenden, um die Elemente zu durchlaufen, um den höchsten Wert zu erhalten

2
lomaxx

Sie können die Funktionalität von Jquery erweitern und Ihre eigene 'attrs'-Implementierung hinzufügen.

Fügen Sie Ihrer JavaScript-Datei die folgenden Codezeilen hinzu:

jQuery.fn.extend({
    attrs: function (attributeName) {
        var results = [];
        $.each(this, function (i, item) {
            results.Push(item.getAttribute(attributeName));
        });
        return results;
    }
});

Jetzt können Sie die Liste der Ebenenwerte abrufen, indem Sie Folgendes aufrufen:

$(".object").attrs("level")
0
Albert Waninge