Gibt es eine einfache Möglichkeit, alle übereinstimmenden Klassen zu entfernen, z.
color-*
Also, wenn ich ein Element habe:
<div id="hello" class="color-red color-brown foo bar"></div>
nach dem Entfernen wäre es
<div id="hello" class="foo bar"></div>
Vielen Dank!
Antworten:
Die Funktion removeClass verwendet seit jQuery 1.4 ein Funktionsargument .
Live-Beispiel: http://jsfiddle.net/xa9xS/1409/
quelle
classes = ( value || "" ).match( rnotwhite ) || [];
sport-
,nav-
undcolor-
?*-color
?(color-|sport-|nav-)
. Es wird übereinstimmencolor-
, odersport-
, odernav-
. Die obige Antwort würde also werden/(^|\s)(color-|sport-|nav-)\S+/g
.quelle
c is undefined
)? Zumindest als ich es unten in meinem Plugin auf dieser Seite$('a').stripClass('post', 1)
ausprobiert habe , warf "TypeError: Methode 'replace' von undefined kann nicht aufgerufen werden"$('div[class]')
sollte nur Elemente mit zurückgebenclass
, unabhängig davon, ob sie einen Wert haben oder nicht. Testszenarien: jsfiddle.net/drzaus/m83mv.removeProp('class')
oder.className=undefined
der Filter gibt[class]
immer noch etwas zurück, sie sind einfachundefined
. Technisch gesehen hat es also immer noch eine Klasse (im Gegensatz zu.removeAttr('class')
, weshalb es Ihre Funktion bricht, aber nicht meine Variante. Jsfiddle.net/drzaus/m83mv/4return c && c.replace(/\bcolor-\S+/g, '');
Ich habe ein Plugin namens alterClass geschrieben, das Elementklassen mit Platzhalterübereinstimmung entfernt. Fügen Sie optional Klassen hinzu: https://gist.github.com/1517285
quelle
Twitter Boostrap
Klassen wie diese entfernen musste:$(".search div").children('div').alterClass('span* row-fluid');
Ich habe dies in ein Jquery-Plugin verallgemeinert, das einen regulären Ausdruck als Argument verwendet.
Kaffee:
Javascript:
In diesem Fall wäre die Verwendung also (sowohl Kaffee als auch Javascript):
Beachten Sie, dass ich die
Array.filter
Funktion verwende, die in IE <9 nicht vorhanden ist. Sie können stattdessen die Filterfunktion von Underscore oder Google für eine Polyfüllung wie diese WTFPL verwenden .quelle
Wenn Sie es an anderen Orten verwenden möchten, empfehle ich Ihnen eine Erweiterung. Dieser funktioniert gut für mich.
Verwendungszweck:
quelle
Wir können alle Klassen von
.attr("class")
und zu Array und Loop & Filter abrufen:Demo: http://jsfiddle.net/L2A27/1/
quelle
var prefix='color';
und geändert ...if (classArr[i].substr(0, prefix.length) != prefix)
Ähnlich wie @ tremby die Antwort ist hier @ Kobi die Antwort als ein Plugin , das entweder Präfixe oder Suffixe übereinstimmen.
btn-mini
undbtn-danger
aber nichtbtn
wannstripClass("btn-")
.horsebtn
undcowbtn
aber nichtbtn-mini
oderbtn
wannstripClass('btn', 1)
Code:
https://gist.github.com/zaus/6734731
quelle
endOrBegin
muss. Es ist nicht selbsterklärend. Was ist schwer daran, einen regulären Ausdruck zu schreiben?/^match-at-start/
und/match-at-end$/
sind jedem JS-Entwickler bekannt. Aber jeder für sich.addClass
,removeClass
undtoggleClass
, die jedem jQuery - Entwickler bekannt ist. Was ist schwer am Lesen von Dokumentation? ;)Versuchen Sie dies für ein jQuery-Plugin
oder dieses
quelle
Basierend auf der Antwort von ARS81 (die nur mit Klassennamen übereinstimmt, die mit beginnen), ist hier eine flexiblere Version. Auch eine Regex-Version.
hasClass()
Verwendungszweck:
$('.selector').removeClassRegex('\\S*-foo[0-9]+')
quelle
Dadurch werden effektiv alle Klassennamen, die mit beginnen,
prefix
aus demclass
Attribut eines Knotens entfernt . Andere Antworten unterstützen keine SVG- Elemente (zum Zeitpunkt des Schreibens), aber diese Lösung bietet:quelle
RegExp
Objekt aus jedem Rückruf einmal zu erstellen ?Ich hatte das gleiche Problem und fand Folgendes, das die _.filter-Methode des Unterstrichs verwendet. Als ich herausfand, dass removeClass eine Funktion übernimmt und Ihnen eine Liste von Klassennamen zur Verfügung stellt, war es einfach, diese in ein Array umzuwandeln und den Klassennamen herauszufiltern, um zur removeClass-Methode zurückzukehren.
quelle
Sie können dies auch mit Vanille-JavaScript mithilfe von Element.classList tun . Es ist auch nicht erforderlich, einen regulären Ausdruck zu verwenden:
function removeColorClasses(element) { for (let className of Array.from(element.classList)) if (className.startsWith("color-")) element.classList.remove(className); }
Hinweis: Beachten Sie, dass wir vor dem Start eine
Array
Kopie von erstellen. DiesclassList
ist wichtig, daclassList
es sich um ein Live handelt,DomTokenList
das aktualisiert wird, wenn Klassen entfernt werden.quelle
Sie können auch die
className
Eigenschaft des DOM-Objekts des Elements verwenden:quelle
Eine generische Funktion, die alle Klassen entfernt, beginnend mit
begin
:http://jsfiddle.net/xa9xS/2900/
quelle
Eine Regex-Aufteilung an der Wortgrenze
\b
ist hierfür nicht die beste Lösung:oder als jQuery-Mixin:
quelle
Wenn Sie mehr als ein Element mit dem Klassennamen 'Beispiel' haben, können Sie Folgendes tun, um Klassen von 'Farbe' in allen zu entfernen: [using jquery]
Wenn Sie [a-z1-9 -] * nicht in Ihre Regex einfügen, werden die Klassen nicht entfernt, deren Namen eine Zahl oder ein '-' enthalten.
quelle
Wenn Sie nur die zuletzt eingestellte Farbe entfernen müssen, passt möglicherweise Folgendes zu Ihnen.
In meiner Situation musste ich dem Body-Tag bei einem Klickereignis eine Farbklasse hinzufügen und die zuletzt festgelegte Farbe entfernen. In diesem Fall speichern Sie die aktuelle Farbe und suchen dann das Daten-Tag, um die zuletzt festgelegte Farbe zu entfernen.
Code:
Könnte nicht genau das sein, was Sie brauchen, aber für mich war es das und dies war die erste SO-Frage, die ich mir ansah. Ich dachte, ich würde meine Lösung teilen, falls sie jemandem hilft.
quelle
Eine alternative Möglichkeit, dieses Problem anzugehen, besteht darin, Datenattribute zu verwenden, die von Natur aus eindeutig sind.
Sie würden die Farbe eines Elements wie folgt einstellen:
$el.attr('data-color', 'red');
Und Sie würden es in CSS wie folgt stylen:
[data-color="red"]{ color: tomato; }
Dies macht die Verwendung von Klassen überflüssig, was den Nebeneffekt hat, dass alte Klassen entfernt werden müssen.
quelle