Można wyciągnąć całą nazwę klasy się z wyrażenia regularnego tak:
$('[class$="blue"]').each(function() {
var clsName = this.className.match(/\w*blue\w*/)[0];
});
Jedną rzeczą, którą należy zdać sobie sprawę, że $('[class$="blue"]')
działa na całym atrybut o nazwie class
. Nie działa na poszczególnych nazwach klas. Tak, będzie to mecz:
class="happy text_blue"
Ale to nie pasuje:
class="text_blue happy"
ponieważ atrybut klasa nie kończą "blue"
. Jeśli chcesz go dostać dowolną nazwę klasy, która zawiera "blue"
niezależnie od tego, gdzie jest umieszczony w atrybucie nazwa klasy, trzeba by użyć:
$('[class*="blue"]').each(function() {
var clsName = this.className.match(/\w*blue\w*/)[0];
});
jeśli dalej chce odfiltrować nazw klas, które nie kończą z niebieskim, można to zrobić z JS tak:
$('[class*="blue"]').each(function() {
var match = this.className.match(/\w*blue(\b|$)/);
if (match) {
var clsName = match[0];
}
});
Jeśli chcesz usunąć te nazwy klasy z obiektów, można zrobić to tak:
$('[class*="blue"]').each(function() {
var match = this.className.match(/\w*blue(\b|$)/);
if (match) {
$(this).removeClass(match[0]);
}
});
To może być również wykonane w taki sposób, który wydaje się nieco czystsze, ale nie idealnie oczyścić dodatkowe spacje wokół nazwy klasy to usunięcie:
$('[class*="blue"]').each(function() {
this.className = this.className.replace(/\w*blue(\b|$)/, "").replace(/\s+/g, ' ');
});
ah mam przyzwyczajony nie do łączenia klas tak, bo IE6 nie zrobił wsparcie, które, jak sądzę, nie ma już znaczenia! Dobra uwaga. Niezależnie od tego, czy istnieje sposób robienia tego, o co pytam? – qodeninja