Existe alguma maneira fácil de remover todas as classes correspondentes, por exemplo,
color-*
então se eu tiver um elemento:
<div id="hello" class="color-red color-brown foo bar"></div>
após a remoção, seria
<div id="hello" class="foo bar"></div>
Obrigado!
Respostas:
A função removeClass usa um argumento de função desde o jQuery 1.4 .
Exemplo ao vivo: http://jsfiddle.net/xa9xS/1409/
fonte
classes = ( value || "" ).match( rnotwhite ) || [];
sport-
,nav-
ecolor-
?*-color
?(color-|sport-|nav-)
. Combinacolor-
, ousport-
, ounav-
. Então, a resposta acima se tornaria/(^|\s)(color-|sport-|nav-)\S+/g
.fonte
c is undefined
)? Pelo menos quando eu tentei seguir no meu plugin nesta página,$('a').stripClass('post', 1)
jogou "TypeError: Não é possível chamar o método 'substituir' de indefinido"$('div[class]')
só deve retornar elementos comclass
, se eles têm um valor ou não. testando cenários: jsfiddle.net/drzaus/m83mv.removeProp('class')
ou.className=undefined
o filtro[class]
ainda retorna algo, eles são justosundefined
. Então, tecnicamente ele ainda tem uma classe (em oposição a.removeAttr('class')
, razão pela qual ele quebra sua função, mas não a minha variante. Jsfiddle.net/drzaus/m83mv/4return c && c.replace(/\bcolor-\S+/g, '');
Eu escrevi um plugin que faz isso chamado alterClass - Remove classes de elemento com correspondência de curinga. Opcionalmente, adicione classes: https://gist.github.com/1517285
fonte
Twitter Boostrap
as classes como este:$(".search div").children('div').alterClass('span* row-fluid');
Eu generalizei isso em um plugin Jquery que usa uma expressão regular como argumento.
Café:
Javascript:
Portanto, nesse caso, o uso seria (Coffee e Javascript):
Observe que estou usando a
Array.filter
função que não existe no IE <9. Você poderia usar a função de filtro do Underscore ou o Google para um polyfill como este WTFPL .fonte
Se você quiser usá-lo em outros lugares, sugiro uma extensão. Este está funcionando bem para mim.
Uso:
fonte
podemos obter todas as classes por
.attr("class")
, e para Array, And loop & filter:demo: http://jsfiddle.net/L2A27/1/
fonte
var prefix='color';
e alterado ...if (classArr[i].substr(0, prefix.length) != prefix)
Semelhante à resposta de @ tremby , aqui está a resposta de @ Kobi como um plug-in que corresponderá a prefixos ou sufixos.
btn-mini
ebtn-danger
mas nãobtn
quandostripClass("btn-")
.horsebtn
ecowbtn
mas nãobtn-mini
oubtn
quandostripClass('btn', 1)
Código:
https://gist.github.com/zaus/6734731
fonte
endOrBegin
deve ser exatamente o valor . Não é auto-explicativo. O que é difícil escrever um regex?/^match-at-start/
e/match-at-end$/
são conhecidos por todo desenvolvedor JS. Mas cada um por conta própria.addClass
,removeClass
etoggleClass
, o que é conhecido por todos os desenvolvedores jQuery. O que é difícil de ler na documentação? ;)Para um plugin jQuery, tente este
ou isto
fonte
Baseado em ARS81 's resposta (que corresponde apenas nomes de classe começando com), aqui está uma versão mais flexível. Também uma
hasClass()
versão regex.Uso:
$('.selector').removeClassRegex('\\S*-foo[0-9]+')
fonte
Isso removerá efetivamente todos os nomes de classe que começam com
prefix
oclass
atributo de um nó . Outras respostas não suportam elementos SVG (no momento em que escrevemos isso), mas esta solução:fonte
RegExp
objeto uma vez, a partir de cada retorno de chamada?Eu tive o mesmo problema e criei o seguinte que usa o método _.filter do sublinhado. Depois que descobri que removeClass usa uma função e fornece uma lista de nomes de classe, foi fácil transformá-lo em uma matriz e filtrar o nome da classe para retornar ao método removeClass.
fonte
Você também pode fazer isso com JavaScript vanilla usando Element.classList . Também não é necessário usar uma expressão regular:
function removeColorClasses(element) { for (let className of Array.from(element.classList)) if (className.startsWith("color-")) element.classList.remove(className); }
Nota: Observe que criamos uma
Array
cópia doclassList
antes de iniciar, o que é importante, poisclassList
é um liveDomTokenList
que será atualizado à medida que as classes forem removidas.fonte
Você também pode usar a
className
propriedade do objeto DOM do elemento:fonte
Uma função genérica que remove qualquer classe que comece com
begin
:http://jsfiddle.net/xa9xS/2900/
fonte
Uma regex dividida no limite da palavra
\b
não é a melhor solução para isso:ou como um mix jQuery:
fonte
se você tiver mais de um elemento com um nome de classe 'exemplo', para remover classes de 'cor-' em todas elas, você pode fazer isso: [using jquery]
se você não colocar [a-z1-9 -] * no seu regex, não removerá as classes que têm um número ou algum '-' em seus nomes.
fonte
Se você apenas precisar remover a última cor definida, o seguinte poderá lhe agradar.
Na minha situação, eu precisava adicionar uma classe de cores à tag body em um evento de clique e remover a última cor definida. Nesse caso, você armazena a cor atual e procura a etiqueta de dados para remover a última cor definida.
Código:
Pode não ser exatamente o que você precisa, mas para mim foi e essa foi a primeira pergunta do SO que eu olhei, então pensei em compartilhar minha solução caso isso ajude alguém.
fonte
Uma maneira alternativa de abordar esse problema é usar atributos de dados, que são por natureza exclusivos.
Você definiria a cor de um elemento como:
$el.attr('data-color', 'red');
E você o estilizaria em css como:
[data-color="red"]{ color: tomato; }
Isso nega a necessidade de usar classes, que tem o efeito colateral de precisar remover classes antigas.
fonte