2013-03-19 12 views
25

Ich habe eine Liste von Elementen, die mehrere Klassen haben, zum Beispiel:Wie erhält man Elemente einer bestimmten Klasse, beginnend mit einer gegebenen Zeichenkette?

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

Wie jQuery-Code zu schreiben, der mir folgendes erlauben ...

$(".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

was ich will, ist th erhalten Sie die Attributklasse Wert, wenn das Element geklickt – fatiDev

Antwort

45

Sie können Regular Expression oder split den Klassennamen verwenden.

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

http://jsfiddle.net/LQPh6/

+0

interessant, ich werde versuchen, diese – fatiDev

+3

@undefined: +1 für die Einhaltung einfach und korrekt. – 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

Dies wird nicht funktionieren, die Klassenattribute beginnen nicht mit 'btn-'. – undefined

+0

@undefined: oops. Habe gerade deinen Standpunkt während der Herstellung von Geige. Es wurde erneut aktualisiert. Vielen Dank! – xyz

+0

Gut, jetzt gibt es zurück, was es sollte. +1 – undefined

2

Sie könnten nur BTN seine eigene Klasse. Dies wird jedoch funktionieren.

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

Eine Klasse beginnend mit btn und die die erste Klasse nicht sein kann:

Arbeits Geige: http://jsfiddle.net/c9Tdx/

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

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

5

es wahrscheinlich besser wäre, Speichern Sie diese Werte im Attribut data:

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

das ist eine gute Idee, aber meine Elemente werden dynamisch generiert, wenn es einfacher Weg ist? – fatiDev

+0

@fatiDev Da sie dynamisch generiert werden, können Sie den Datentyp "btntype" beim Erstellen des Elements nicht festlegen. – Marcus

+0

was gemeint ist, ist, dass die Daten btn Typ für die gleiche Schaltfläche geändert werden kann – fatiDev

1

die Sie interessieren,

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'"; 

Der Code ist nicht getestet.

16

können Sie auch versuchen:

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

Spiel Verwendet statt grep ...

+0

warum passen statt grep? – fatiDev

+3

Es ist die eine, die ich kenne, nur eine Alternative anzubieten. So oder so ist es gut. Eigentlich ist dieser Ansatz etwas weniger kompliziert, man erhält die Zeichenfolge direkt, ohne ein Array manipulieren zu müssen. –

+0

okey es ist klar – fatiDev

2

ich nur @Vohuman ‚s-Funktion eine gemacht wieder benutzbaren:

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

Beispiel ...

HTML:

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

JS:

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

Das h-4 zurückkehren wird, und wenn keine Klasse mit h- beginnt wird false

Demo zurück:

Verwandte Themen