jQuery - dapatkan daftar nilai atribut dari elemen kelas

86

Saya memiliki kelas .objectyang memiliki atribut bernama level. Saya ingin mendapatkan daftar semua nilai yang berbeda levelpada halaman sehingga saya dapat memilih yang tertinggi.

Jika saya melakukan sesuatu seperti:

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

... akankah itu memberi saya daftar nilai yang merupakan nilai dari atribut level? Saya kira tidak, tapi kemudian bagaimana Anda melakukan sesuatu seperti itu?

Catatan: Saya tidak ingin memilih objek HTML untuk manipulasi seperti yang lebih umum, saya ingin memilih nilai atribut.

EDIT: Untuk mendapatkan "level" tertinggi saya telah melakukan ini, tetapi tampaknya tidak berhasil. Saya akan mencoba metode lain yang disarankan sekarang.

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

alert(highLevel);
Ankur
sumber
5
@Ankur, Anda harus memilih salah satu dari ini sebagai jawaban untuk pertanyaan ini
Nathan Koop

Jawaban:

196

$(".object").attr("level")hanya akan mengembalikan atribut pertama .objectelemen pertama .

Ini akan memberi Anda array dari semua levels:

var list = $(".object").map(function(){return $(this).attr("level");}).get();
Kobi
sumber
6
Apa fungsinya .get()?
Yuji 'Tomita' Tomita
21
@Yuji - getmengubah objek jQuery menjadi array biasa.
Kobi
@MandeepJain: Bagaimana seseorang menandai jawaban sebagai 'benar'? Yang ini mungkin belum ditandai sebagai 'diterima', tetapi lebih dari 100 orang telah memilihnya 'berguna', dan itu cukup bagus untuk saya!
Michael Scheper
1
Jawaban yang bagus. Sedikit lebih intuitif / lebih bersih bagi saya adalah dengan .get()array terlebih dahulu, kemudian gunakan .map()fungsi panah plus (dukungan browser: caniuse.com/#search=arrow ) untuk membangun array dengan javascript sederhana:$(".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>

Saya mengasumsikan markup seperti ini:

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

Untuk kode saya, saya mendapat peringatan "1000".

Berikut solusi lain, menggabungkan beberapa balasan lain dari harpo, lomaxx, dan 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);
});
artlung
sumber
2

selektor

$(".object[level]")

akan memberi Anda semua elemen dom dengan kelas objectdan atribut level.

Kemudian Anda bisa menggunakan metode .each () untuk mengulangi elemen untuk mendapatkan nilai tertinggi

lomaxx
sumber
$(".object[level=something]") di mana sesuatu adalah nilai atribut yang Anda cari
James
0

Anda dapat memperluas fungsionalitas Jquery dan menambahkan implementasi 'attrs' Anda sendiri.

Tambahkan baris kode berikut ke file JavaScript Anda:

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

Sekarang Anda bisa mendapatkan daftar nilai level dengan memanggil:

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