Czy jest jakiś prosty sposób na usunięcie wszystkich pasujących klas, na przykład
color-*
więc jeśli mam element:
<div id="hello" class="color-red color-brown foo bar"></div>
po usunięciu byłoby
<div id="hello" class="foo bar"></div>
Dzięki!
Odpowiedzi:
Funkcja removeClass pobiera argument funkcji od jQuery 1.4 .
Przykład na żywo: http://jsfiddle.net/xa9xS/1409/
źródło
classes = ( value || "" ).match( rnotwhite ) || [];
sport-
,nav-
icolor-
?*-color
?(color-|sport-|nav-)
. Będzie pasowaćcolor-
, lubsport-
, lubnav-
. Tak więc powyższa odpowiedź stałaby się/(^|\s)(color-|sport-|nav-)\S+/g
.źródło
c is undefined
)? Przynajmniej kiedy wypróbowałem to poniżej w mojej wtyczce na tej stronie,$('a').stripClass('post', 1)
rzuciłem „TypeError: Nie można nazwać metody„ replace ”niezdefiniowanej”$('div[class]')
powinien zwracać tylko elementyclass
, niezależnie od tego, czy mają wartość, czy nie. scenariusze testowe: jsfiddle.net/drzaus/m83mv.removeProp('class')
lub.className=undefined
filtr[class]
wciąż coś zwraca, są po prostuundefined
. Więc technicznie nadal ma klasę (w przeciwieństwie do.removeAttr('class')
, dlatego psuje twoją funkcję, ale nie mój wariant. Jsfiddle.net/drzaus/m83mv/4return c && c.replace(/\bcolor-\S+/g, '');
Napisałem wtyczkę, która robi to o nazwie alterClass - Usuń klasy elementów z dopasowaniem symboli wieloznacznych. Opcjonalnie dodaj klasy: https://gist.github.com/1517285
źródło
Twitter Boostrap
takie klasy:$(".search div").children('div').alterClass('span* row-fluid');
Uogólniłem to na wtyczkę Jquery, która przyjmuje wyrażenie jako argument.
Kawa:
JavaScript:
Tak więc w tym przypadku użycie byłoby (zarówno Kawa, jak i JavaScript):
Zauważ, że używam
Array.filter
funkcji, która nie istnieje w IE <9. Możesz użyć funkcji filtru podkreślenia zamiast Google lub Google do wypełnienia takiego jak ten WTFPL .źródło
Jeśli chcesz go używać w innych miejscach, sugeruję rozszerzenie. Ten działa dla mnie dobrze.
Stosowanie:
źródło
możemy pobrać wszystkie klasy
.attr("class")
, i do tablicy, i zapętlić i filtrować:demo: http://jsfiddle.net/L2A27/1/
źródło
var prefix='color';
i zmieniono ...if (classArr[i].substr(0, prefix.length) != prefix)
Podobny do użytkownika @ tremby odpowiedź , oto @ Kobi za odpowiedź jako plugin, który będzie pasował zarówno przedrostków lub przyrostków.
btn-mini
ibtn-danger
ale niebtn
kiedystripClass("btn-")
.horsebtn
icowbtn
ale niebtn-mini
lubbtn
kiedystripClass('btn', 1)
Kod:
https://gist.github.com/zaus/6734731
źródło
endOrBegin
powinna być wartość. To nie jest oczywiste. Co jest trudnego w napisaniu wyrażenia regularnego?/^match-at-start/
i/match-at-end$/
są znane wszystkim programistom JS. Ale każdy na swój.addClass
,removeClass
itoggleClass
, który jest znany każdemu jQuery dewelopera. Co jest trudne w czytaniu dokumentacji? ;)W przypadku wtyczki jQuery spróbuj tego
albo to
źródło
Na podstawie ARS81 „s odpowiedź (to tylko mecze nazwy klas rozpoczynające się), tutaj jest bardziej elastyczna wersja. Również
hasClass()
wersja wyrażenia regularnego.Stosowanie:
$('.selector').removeClassRegex('\\S*-foo[0-9]+')
źródło
To skutecznie usunie wszystkie nazwy klas, które zaczynają się
prefix
odclass
atrybutu węzła . Inne odpowiedzi nie obsługują elementów SVG (w momencie pisania tego), ale to rozwiązanie:źródło
RegExp
obiektu raz z każdego wywołania zwrotnego?Miałem ten sam problem i przedstawiłem następujące, które wykorzystują metodę _.filter podkreślenia. Gdy odkryłem, że removeClass przyjmuje funkcję i udostępnia listę nazw klas, łatwo było przekształcić ją w tablicę i odfiltrować nazwę klasy, aby powrócić do metody removeClass.
źródło
Możesz to również zrobić za pomocą waniliowego JavaScript za pomocą Element.classList . Nie ma potrzeby używania wyrażenia regularnego:
function removeColorClasses(element) { for (let className of Array.from(element.classList)) if (className.startsWith("color-")) element.classList.remove(className); }
Uwaga: zauważ, że tworzymy
Array
kopięclassList
przed rozpoczęciem, jest to ważne, ponieważclassList
jest to transmisja na żywo,DomTokenList
która będzie aktualizowana po usunięciu klas.źródło
Możesz także użyć
className
właściwości obiektu DOM elementu:źródło
Ogólna funkcja usuwająca dowolną klasę zaczynającą się od
begin
:http://jsfiddle.net/xa9xS/2900/
źródło
Dzielenie wyrażeń regularnych na granicy słów
\b
nie jest najlepszym rozwiązaniem:lub jako mixin jQuery:
źródło
jeśli masz więcej niż jeden element o nazwie klasy „przykład”, aby usunąć klasy „kolor-” we wszystkich, możesz to zrobić: [używając jquery]
jeśli nie umieścisz [a-z1-9 -] * w wyrażeniu regularnym, nie usunie to klas, które mają numery lub niektóre „-” w ich nazwach.
źródło
Jeśli chcesz tylko usunąć ostatni ustawiony kolor, poniższe mogą Ci odpowiadać.
W mojej sytuacji musiałem dodać klasę kolorów do tagu body na zdarzeniu kliknięcia i usunąć ostatni ustawiony kolor. W takim przypadku zapisujesz bieżący kolor, a następnie wyszukujesz znacznik danych, aby usunąć ostatni ustawiony kolor.
Kod:
Może nie być dokładnie tym, czego potrzebujesz, ale dla mnie było to i było to pierwsze pytanie SO, na które spojrzałem, więc pomyślałem, że podzielę się moim rozwiązaniem, na wypadek, gdyby komukolwiek to pomogło.
źródło
Alternatywnym sposobem podejścia do tego problemu jest użycie atrybutów danych, które z natury są unikalne.
Ustawiłbyś kolor elementu takiego jak:
$el.attr('data-color', 'red');
I stylizowałbyś to w css:
[data-color="red"]{ color: tomato; }
To neguje potrzebę korzystania z klas, co powoduje efekt uboczny usuwania starych klas.
źródło