jQuery: ottieni un elenco di valori di un attributo dagli elementi di una classe


86

Ho una classe .objectche ha un attributo chiamato level. Voglio ottenere un elenco di tutti i diversi valori di levelsulla pagina in modo da poter selezionare quello più alto.

Se faccio qualcosa come:

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

... questo mi farà ottenere un elenco di valori che sono i valori dell'attributo level? Sospetto di no, ma allora come fai a fare una cosa del genere?

Nota: non voglio selezionare un oggetto HTML per la manipolazione come è più comune, piuttosto voglio selezionare i valori dell'attributo.

EDIT: Per ottenere il più alto "livello" ho fatto questo, ma non sembra funzionare. Adesso proverò l'altro metodo suggerito.

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

alert(highLevel);

5
@Ankur dovresti selezionare uno di questi come risposta a questa domanda
Nathan Koop

Risposte:


195

$(".object").attr("level")restituirà solo l'attributo del primo il primo .objectelemento.

Questo ti darà un array di tutti leveli:

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

6
Cosa fa .get()?
Yuji 'Tomita' Tomita

21
@Yuji - getconverte l'oggetto jQuery in un normale array.
Kobi

@MandeepJain: come si fa a contrassegnare una risposta come "corretta"? Questo potrebbe non essere stato contrassegnato come "accettato", ma più di 100 persone lo hanno votato "utile", e per me va bene così!
Michael Scheper

1
Bella risposta. Un po 'più intuitivo / più pulito per me è .get()prima l'array, quindi usa la .map()funzione più freccia (supporto browser: caniuse.com/#search=arrow ) per costruire l'array con un piccolo javascript semplice:$(".object").get().map(x => x.getAttribute('level'));
elPastor


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>

Suppongo che un markup come questo:

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

Per il mio codice ricevo un avviso "1000".

Ecco un'altra soluzione, combinando molte delle altre risposte di harpo, lomaxx e 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);
});

2

il selettore

$(".object[level]")

ti darà tutti gli elementi dom con class objecte un attributo level.

Quindi puoi semplicemente usare il metodo .each () per iterare sugli elementi per ottenere il valore più alto


$(".object[level=something]") dove qualcosa è il valore dell'attributo che stai cercando
James

0

È possibile estendere le funzionalità di Jquery e aggiungere la propria implementazione "attrs".

Aggiungi le seguenti righe di codice al tuo file JavaScript:

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

Ora puoi ottenere l'elenco dei valori di livello chiamando:

$(".object").attrs("level")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.