jQuery - bir sınıfın öğelerinden bir özniteliğin değerlerinin listesini alır


86

.objectAdlı bir niteliğe sahip bir sınıfım var level. levelEn yüksek olanı seçebilmem için sayfadaki tüm farklı değerlerin bir listesini almak istiyorum .

Şöyle bir şey yaparsam:

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

... bu bana level özniteliğinin değerleri olan değerlerin bir listesini getirecek mi? Sanmıyorum ama o zaman böyle bir şeyi nasıl yaparsın?

Not: Daha yaygın olduğu için manipülasyon için bir HTML nesnesi seçmek istemiyorum, bunun yerine niteliğin değerlerini seçmek istiyorum.

DÜZENLEME: En yüksek "seviyeyi" elde etmek için bunu yaptım, ama işe yaramıyor gibi görünüyor. Şimdi önerilen diğer yöntemi deneyeceğim.

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

alert(highLevel);

5
@Ankur bu sorunun cevabı olarak bunlardan birini seçmelisiniz
Nathan Koop

Yanıtlar:


196

$(".object").attr("level")sadece ilk .objectelemanın özniteliğini döndürür .

Bu size tüm dizilerin bir dizisini verecektir level:

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

6
Ne yapar .get()?
Yuji 'Tomita' Tomita

21
@Yuji - getjQuery nesnesini normal bir diziye dönüştürür.
Kobi

@MandeepJain: Bir yanıtı nasıl 'doğru' olarak işaretler? Bu, 'kabul edildi' olarak işaretlenmemiş olabilir, ancak 100'den fazla kişi onu 'faydalı' olarak oyladı ve bu benim için yeterince iyi!
Michael Scheper

1
Mükemmel cevap. Benim için biraz daha sezgisel / temizleyici .get()önce diziyi kullanmaktır, ardından diziyi biraz sade bir javascript ile oluşturmak için .map()artı ok işlevini (tarayıcı desteği: caniuse.com/#search=arrow ) kullanın:$(".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>

Şu şekilde işaretlemeyi varsayıyorum:

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

Kodum için bana "1000" uyarısı alıyorum.

İşte harpo, lomaxx ve Kobi'den gelen diğer birkaç yanıtı birleştiren başka bir çözüm:

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

seçici

$(".object[level]")

size sınıf objectve bir niteliğe sahip tüm dom öğelerini verecektir level.

Ardından, en yüksek değeri elde etmek için öğeler üzerinde yinelemek için .each () yöntemini kullanabilirsiniz.


$(".object[level=something]") bir şey aradığınız özellik değeridir
James

0

Şunları yapabilirsiniz jQuery işlevselliğini genişletmek ve kendi 'attrs' uygulamasını ekleyin.

Aşağıdaki kod satırlarını JavaScript dosyanıza ekleyin:

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

Şimdi aşağıdaki çağrıları yaparak seviye değerlerinin listesini alabilirsiniz:

$(".object").attrs("level")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.