jQuery - Ruft eine Liste der Werte eines Attributs aus Elementen einer Klasse ab

85

Ich habe eine Klasse .objectmit einem Attribut namens level. Ich möchte eine Liste aller verschiedenen Werte levelauf der Seite erhalten, damit ich den höchsten auswählen kann.

Wenn ich so etwas mache wie:

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

... bringt mir das eine Liste von Werten, die die Werte des Level-Attributs sind? Ich vermute nicht, aber wie macht man so etwas?

Hinweis: Ich möchte nicht wie üblich ein HTML-Objekt zur Bearbeitung auswählen, sondern Werte des Attributs auswählen.

EDIT: Um das höchste "Level" zu erreichen, habe ich dies getan, 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);
Ankur
quelle
5
@ Ankur Sie sollten eine davon als Antwort auf diese Frage auswählen
Nathan Koop

Antworten:

191

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

Dadurch erhalten Sie eine Reihe aller levels:

var list = $(".object").map(function(){return $(this).attr("level");}).get();
Kobi
quelle
6
Was macht das .get()?
Yuji 'Tomita' Tomita
19
@Yuji - getkonvertiert das jQuery-Objekt in ein reguläres Array.
Kobi
@MandeepJain: Wie markiert man eine Antwort als "richtig"? Dieser wurde möglicherweise nicht als "akzeptiert" markiert, aber über 100 Personen haben ihn als "nützlich" eingestuft, und das ist gut genug für mich!
Michael Scheper
1
Gute Antwort. Etwas intuitiver / sauberer für mich ist es, zuerst .get()das Array zu verwenden und dann die .map()Plus-Pfeil-Funktion (Browser-Unterstützung: caniuse.com/#search=arrow ) zu verwenden, um das Array mit einem einfachen Javascript zu $(".object").get().map(x => x.getAttribute('level'));
erstellen
3
<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 von einem solchen Markup aus:

<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 mit "1000" benachrichtigt.

Hier ist eine andere Lösung, die mehrere 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);
});
artlung
quelle
2

der Selektor

$(".object[level]")

gibt Ihnen alle dom-Elemente mit Klasse objectund einem Attribut level.

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

Lomaxx
quelle
$(".object[level=something]") Wo etwas ist, nach welchem ​​Attributwert Sie suchen
James
0

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")
Albert Waninge
quelle