¿Hay alguna manera fácil de eliminar todas las clases que coinciden, por ejemplo,
color-*
entonces si tengo un elemento:
<div id="hello" class="color-red color-brown foo bar"></div>
después de quitar, sería
<div id="hello" class="foo bar"></div>
¡Gracias!
Respuestas:
La función removeClass toma un argumento de función desde jQuery 1.4 .
Ejemplo en vivo: http://jsfiddle.net/xa9xS/1409/
fuente
classes = ( value || "" ).match( rnotwhite ) || [];
sport-
,nav-
ycolor-
?*-color
?(color-|sport-|nav-)
. Coincidirácolor-
, osport-
, onav-
. Entonces, la respuesta anterior se convertiría/(^|\s)(color-|sport-|nav-)\S+/g
.fuente
c is undefined
)? Al menos cuando lo probé a continuación en mi plugin en esta página,$('a').stripClass('post', 1)
arrojé "TypeError: No se puede llamar al método 'reemplazar' de indefinido"$('div[class]')
solo debería devolver elementos conclass
, tengan o no un valor. escenarios de prueba: jsfiddle.net/drzaus/m83mv.removeProp('class')
o.className=undefined
el filtro[class]
todavía devuelve algo, son justosundefined
. Por lo tanto, técnicamente todavía tiene una clase (a diferencia de.removeAttr('class')
, por eso rompe su función pero no mi variante. Jsfiddle.net/drzaus/m83mv/4return c && c.replace(/\bcolor-\S+/g, '');
He escrito un complemento que hace esto llamado alterClass - Eliminar clases de elementos con coincidencia de comodines. Opcionalmente agregue clases: https://gist.github.com/1517285
fuente
Twitter Boostrap
clases como esta:$(".search div").children('div').alterClass('span* row-fluid');
He generalizado esto en un complemento de Jquery que toma una expresión regular como argumento.
Café:
Javascript:
Entonces, para este caso, el uso sería (tanto Coffee como Javascript):
Tenga en cuenta que estoy usando la
Array.filter
función que no existe en IE <9. En su lugar, puede usar la función de filtro de Underscore o Google para un polyfill como este WTFPL .fuente
Si desea usarlo en otros lugares, le sugiero una extensión. Este está funcionando bien para mí.
Uso:
fuente
podemos obtener todas las clases por
.attr("class")
, y a Array, Y loop & filter:demostración: http://jsfiddle.net/L2A27/1/
fuente
var prefix='color';
y cambiado ...if (classArr[i].substr(0, prefix.length) != prefix)
Similar a la respuesta de @ tremby , aquí está la respuesta de @ Kobi como un complemento que coincidirá con prefijos o sufijos.
btn-mini
ybtn-danger
nobtn
cuandostripClass("btn-")
.horsebtn
ycowbtn
pero nobtn-mini
obtn
cuandostripClass('btn', 1)
Código:
https://gist.github.com/zaus/6734731
fuente
endOrBegin
debe ser exactamente el valor . No se explica por sí mismo. ¿Qué tiene de difícil escribir una expresión regular?/^match-at-start/
y/match-at-end$/
son conocidos por todos los desarrolladores de JS. Pero cada uno a lo suyo.addClass
,removeClass
ytoggleClass
, que se sabe que todos los desarrolladores de jQuery. ¿Qué tiene de difícil leer la documentación? ;)Para un complemento jQuery intente esto
o esto
fuente
Basado en la respuesta de ARS81 (que solo coincide con los nombres de clase que comienzan con), aquí hay una versión más flexible. También una versión regex.
hasClass()
Uso:
$('.selector').removeClassRegex('\\S*-foo[0-9]+')
fuente
Esto eliminará efectivamente todos los nombres de clase que comienzan con
prefix
elclass
atributo de un nodo . Otras respuestas no admiten elementos SVG (al momento de escribir esto), pero esta solución sí:fuente
RegExp
objeto una vez, fuera de cada devolución de llamada?Tuve el mismo problema y se me ocurrió lo siguiente que utiliza el método _.filter de subrayado. Una vez que descubrí que removeClass toma una función y le proporciona una lista de nombres de clase, fue fácil convertir eso en una matriz y filtrar el nombre de clase para volver al método removeClass.
fuente
También puede hacer esto con JavaScript vainilla usando Element.classList . Tampoco es necesario usar una expresión regular:
function removeColorClasses(element) { for (let className of Array.from(element.classList)) if (className.startsWith("color-")) element.classList.remove(className); }
Nota: Tenga en cuenta que creamos una
Array
copia delclassList
antes de comenzar, eso es importante ya queclassList
es un liveDomTokenList
que se actualizará cuando se eliminen las clases.fuente
También puede usar la
className
propiedad del objeto DOM del elemento:fuente
Una función genérica que elimina cualquier clase que comience con
begin
:http://jsfiddle.net/xa9xS/2900/
fuente
Una división de expresiones regulares en el límite de palabras
\b
no es la mejor solución para esto:o como jQuery mixin:
fuente
si tiene más de un elemento que tiene un nombre de clase 'ejemplo', para eliminar clases de 'color-' en todos ellos puede hacer esto: [usando jquery]
si no pone [a-z1-9 -] * en su expresión regular, no eliminará las clases que tienen un número o algunos '-' en sus nombres.
fuente
Si solo necesita eliminar el último color establecido, lo siguiente puede ser adecuado para usted.
En mi situación, necesitaba agregar una clase de color a la etiqueta del cuerpo en un evento de clic y eliminar el último color establecido. En ese caso, almacena el color actual y luego busca la etiqueta de datos para eliminar el último color establecido.
Código:
Puede que no sea exactamente lo que necesita, pero para mí fue y esta fue la primera pregunta SO que miré, por lo que pensé en compartir mi solución en caso de que ayude a alguien.
fuente
Una forma alternativa de abordar este problema es utilizar atributos de datos, que por naturaleza son únicos.
Establecería el color de un elemento como:
$el.attr('data-color', 'red');
Y lo diseñarías en CSS como:
[data-color="red"]{ color: tomato; }
Esto niega la necesidad de usar clases, lo que tiene el efecto secundario de tener que eliminar las clases antiguas.
fuente