Existe-t-il un moyen simple de supprimer toutes les classes correspondantes, par exemple,
color-*
donc si j'ai un élément:
<div id="hello" class="color-red color-brown foo bar"></div>
après le retrait, il serait
<div id="hello" class="foo bar"></div>
Merci!
Réponses:
La fonction removeClass prend un argument de fonction depuis jQuery 1.4 .
Exemple en direct: http://jsfiddle.net/xa9xS/1409/
la source
classes = ( value || "" ).match( rnotwhite ) || [];
sport-
,nav-
etcolor-
?*-color
?(color-|sport-|nav-)
. Il correspondracolor-
, ousport-
, ounav-
. Ainsi, la réponse ci-dessus deviendrait/(^|\s)(color-|sport-|nav-)\S+/g
.la source
c is undefined
)? Au moins quand je l'ai essayé ci- dessous dans mon plugin sur cette page,$('a').stripClass('post', 1)
j'ai lancé "TypeError: Impossible d'appeler la méthode 'replace' of undefined"$('div[class]')
devrait seulement renvoyer des éléments avecclass
, qu'ils aient une valeur ou non. scénarios de test: jsfiddle.net/drzaus/m83mv.removeProp('class')
ou.className=undefined
le filtre[class]
renvoie toujours quelque chose, ils sont justeundefined
. Donc techniquement, il a toujours une classe (par opposition à.removeAttr('class')
, c'est pourquoi il casse votre fonction mais pas ma variante. Jsfiddle.net/drzaus/m83mv/4return c && c.replace(/\bcolor-\S+/g, '');
J'ai écrit un plugin qui fait cela appelé alterClass - Supprimer les classes d'éléments avec une correspondance générique. Ajoutez éventuellement des classes: https://gist.github.com/1517285
la source
Twitter Boostrap
classes comme celle-ci:$(".search div").children('div').alterClass('span* row-fluid');
J'ai généralisé cela dans un plugin Jquery qui prend un regex comme argument.
Café:
Javascript:
Donc, dans ce cas, l'utilisation serait (à la fois Coffee et Javascript):
Notez que j'utilise la
Array.filter
fonction qui n'existe pas dans IE <9. Vous pouvez utiliser la fonction de filtre Underscore à la place ou Google pour un polyfill comme celui-ci WTFPL .la source
Si vous souhaitez l'utiliser dans d'autres endroits, je vous suggère une extension. Celui-ci fonctionne bien pour moi.
Usage:
la source
nous pouvons obtenir toutes les classes par
.attr("class")
et vers Array, And loop & filter:démo: http://jsfiddle.net/L2A27/1/
la source
var prefix='color';
et modifié ...if (classArr[i].substr(0, prefix.length) != prefix)
Semblables à @ tremby réponse , voici @ Kobi réponse en tant que plug - in qui correspondent soit des préfixes ou suffixes.
btn-mini
etbtn-danger
mais pasbtn
quandstripClass("btn-")
.horsebtn
etcowbtn
mais pasbtn-mini
oubtn
quandstripClass('btn', 1)
Code:
https://gist.github.com/zaus/6734731
la source
endOrBegin
doit être exactement la valeur . Ce n'est pas explicite. Qu'est-ce qui est difficile à écrire une expression régulière?/^match-at-start/
et/match-at-end$/
sont connus de tous les développeurs JS. Mais chacun à sa façon.addClass
,removeClass
ettoggleClass
qui est connu pour chaque développeur jQuery. Qu'est-ce qui est difficile à lire dans la documentation? ;)Pour un plugin jQuery essayez ceci
ou ca
la source
Basé sur la réponse d' ARS81 (qui ne correspond qu'aux noms de classe commençant par), voici une version plus flexible. Aussi une version regex.
hasClass()
Usage:
$('.selector').removeClassRegex('\\S*-foo[0-9]+')
la source
Cela supprimera efficacement tous les noms de classe qui commencent par
prefix
l'class
attribut d'un nœud . D'autres réponses ne prennent pas en charge les éléments SVG (au moment d'écrire ceci), mais cette solution:la source
RegExp
objet une fois, à partir de chaque rappel?J'ai eu le même problème et j'ai trouvé ce qui suit qui utilise la méthode _.filter du soulignement. Une fois que j'ai découvert que removeClass prend une fonction et vous fournit une liste de noms de classe, il était facile de transformer cela en un tableau et de filtrer le nom de classe pour revenir à la méthode removeClass.
la source
Vous pouvez également le faire avec JavaScript vanilla en utilisant Element.classList . Pas besoin non plus d'utiliser une expression régulière:
function removeColorClasses(element) { for (let className of Array.from(element.classList)) if (className.startsWith("color-")) element.classList.remove(className); }
Remarque: notez que nous créons une
Array
copie duclassList
avant de commencer, c'est important carclassList
c'est un liveDomTokenList
qui se mettra à jour lorsque les classes seront supprimées.la source
Une fonction générique qui supprime toute classe commençant par
begin
:http://jsfiddle.net/xa9xS/2900/
la source
Vous pouvez également utiliser la
className
propriété de l'objet DOM de l'élément:la source
Un regex se divisant sur la frontière de mot
\b
n'est pas la meilleure solution pour cela:ou en mixage jQuery:
la source
si vous avez plusieurs éléments ayant un nom de classe 'exemple', pour supprimer les classes de 'couleur-' dans chacun d'eux, vous pouvez le faire: [en utilisant jquery]
si vous ne mettez pas [a-z1-9 -] * dans votre regex, cela ne supprimera pas les classes qui ont un nombre ou des '-' dans leurs noms.
la source
Si vous avez juste besoin de supprimer la dernière couleur définie, les éléments suivants peuvent vous convenir.
Dans ma situation, je devais ajouter une classe de couleurs à la balise body sur un événement de clic et supprimer la dernière couleur définie. Dans ce cas, vous stockez la couleur actuelle, puis recherchez la balise de données pour supprimer la dernière couleur définie.
Code:
Ce n'est peut-être pas exactement ce dont vous avez besoin, mais pour moi, c'était le cas et c'était la première question SO que j'ai examinée, alors j'ai pensé partager ma solution au cas où cela aiderait quelqu'un.
la source
Une autre façon d'aborder ce problème consiste à utiliser des attributs de données, qui sont par nature uniques.
Vous définiriez la couleur d'un élément comme:
$el.attr('data-color', 'red');
Et vous le styleriez en CSS comme:
[data-color="red"]{ color: tomato; }
Cela annule la nécessité d'utiliser des classes, ce qui a pour effet secondaire de devoir supprimer les anciennes classes.
la source