2013-03-19 25 views
25

Ben örneğin, birden çok sınıfları unsurların bir listesi var:Belirli bir sınıfa belirli bir dizeyle başlayan öğeler nasıl alınır?

<input class="etape btn-info others"> 
<input class="etape btn-inverse others"> 
<input class="etape btn-danger others"> 

Nasıl aşağıdaki beni sağlayacak jQuery kodu yazmak için ...

$(".etape").click(function(){ 
    $(this).get("the class that starts with btn-") 
    // in order to store this value in a variable to reuse it later 
}); 
+0

İstediğim şey, öğe – fatiDev

cevap

45

Normal İfade veya split sınıf adını kullanabilirsiniz.

$(".etape").click(function(){ 
    var classes = $.grep(this.className.split(" "), function(v, i){ 
     return v.indexOf('btn') === 0; 
    }).join(); 
}); 

http://jsfiddle.net/LQPh6/

+0

öneri için teşekkürler. – fatiDev

+3

@undefined: +1 bunu basit ve doğru tutmak için önereceğim – xyz

8
// Only select input which have class 
$('input[class]').click(function(){ 
    var myClass; 
    // classNames will contain all applied classes 
    var classNames = $(this).attr('class').split(/\s+/); 

    // iterate over all class 
    $.each(classNames, function(index, item) { 
     // Find class that starts with btn- 
     if(item.indexOf("btn-") == 0){ 
      // Store it 
      myClass = item; 
     } 
    }); 

    }); 

Live Demo

+0

tıklandığında özellik sınıf değerini almasıdır. Bu işe yaramazsa, sınıf özellikleri 'btn-' ile başlamaz. – undefined

+0

@undefined: oops. Sadece keman yaparken noktanı aldım. Tekrar güncellendi. Teşekkürler! – xyz

+0

İyi, şimdi ne gerekiyorsa onu döndürür. +1 – undefined

2

sadece kendi sınıfında btn yapabiliriz. Ancak, bu işe yarayacak.

$("div[class^='btn-']") 
1

btn ile A sınıfı başlangıç ​​ve birinci sınıf olamaz ki:

Çalışma keman: http://jsfiddle.net/c9Tdx/

$("input[class^='btn'],input[class*=' btn']").each(function(){ 
    //whatever 
}); 
2

bu deneyin: $('input[class*='btn']').attr("class");

5

Muhtemelen daha iyi olurdu Bu değerleri data özniteliğinde sakla:

Sonra
<input class="etape others" data-btntype="info"> 
<input class="etape others" data-btntype="inverse"> 
<input class="etape others" data-btntype="danger"> 

:

$(".etape").click(function(){ 
    var myBtnType = $(this).data('btntype'); 
}); 

jsFiddle

+1

tıklatılan öğe için btn ile başlayan öznitelik sınıfının elde edilmesidir, bu iyi bir fikirdir, ancak daha basit bir yol varsa, öğelerim dinamik olarak oluşturulur mu? – fatiDev

+0

@fatiDev Dinamik olarak oluşturuldukları için, öğeyi oluştururken veri-btntype'ı neden ayarlayamıyorsunuz? – Marcus

+0

anlamı, btn tipinin aynı düğme – fatiDev

1

bu deneyin, kod test edilmemiştir

if($(selector).attr("class").lastIndexOf("classToStartFrom") == 0) 
    return "this selector class name starts with 'classToStartFrom'"; 
else 
    return "this selector class name doesn't start with 'classToStartFrom'"; 

.

16

Ayrıca deneyebilirsiniz:

$(".etape").click(function() { 
    var theClass = $(this).attr("class").match(/btn[\w-]*\b/); 
    console.log(theClass); 
}); 

grep yerine maçı kullanır ...

+0

neden grep yerine maç? – fatiDev

+3

Bildiğim tek şey, sadece bir alternatif sunuyor. Her iki yol da iyidir. Aslında, bu yaklaşım biraz daha az karmaşıktır, bir diziyi işlemek zorunda kalmadan dizeyi doğrudan alırsınız. –

+0

tamam açık – fatiDev

2

Demin ettiğim @Vohuman 'ın fonksiyonu birini yeniden kullanılabilir için:

// getClassStartsWith(classes,startswith); 
// Example : getClassStartsWith('item w-2 h-4 hello' , 'h-'); 
function getClassStartsWith(t,n){var r=$.grep(t.split(" "),function(t,r){return 0===t.indexOf(n)}).join();return r||!1} 

Örnek ...

HTML:

<div class="item w-2 h-4 hello"></div> 

JS: h-4 dönecektir, Ve hiçbir sınıf h- ile başlıyorsa dönecektir

var $element = $('.item'); 
var classes = $element[0].className; 
var getHeight = getClassStartsWith(classes,'h-'); 

false

Demo:http://jsbin.com/mijujunaca/edit?js,console

İlgili konular