Até agora eu tenho que fazer isso:
elem.classList.add("first");
elem.classList.add("second");
elem.classList.add("third");
Embora isso seja possível no jQuery, assim
$(elem).addClass("first second third");
Gostaria de saber se existe alguma maneira nativa de adicionar ou remover.
javascript
html
Tenda Enrique Moreno
fonte
fonte
O novo operador de spread facilita ainda mais a aplicação de várias classes CSS como matriz:
fonte
DOMTokenList
vez de uma matriz? Eu sei que um DOMTokenList é um objeto de matriz. Portanto, é possível usá-lo com oclassList.add()
método ou o DOMTokenList deve ser convertido em uma matriz real?A
classList
propriedade garante que classes duplicadas não sejam adicionadas desnecessariamente ao elemento. A fim de manter essa funcionalidade, se você não gosta das versões longhand ou versão jQuery, eu sugiro a adição de umaaddMany
função eremoveMany
paraDOMTokenList
(o tipo declassList
):Estes seriam então utilizáveis da seguinte forma:
Atualizar
De acordo com seus comentários, se você deseja escrever apenas um método personalizado para eles, caso eles não sejam definidos, tente o seguinte:
fonte
Como o
add()
método daclassList
just permite passar argumentos separados e não uma única matriz, você precisa invocaradd()
usando apply. Para o primeiro argumento, você precisará passar aclassList
referência do mesmo nó DOM e, como segundo argumento, a matriz de classes que você deseja adicionar:fonte
Para adicionar classe a um elemento
Remover uma turma
fonte
className
. É terrível para o desempenho (mesmo recuperar seu valor causa um reflow).As versões mais recentes da especificação DOMTokenList permitem vários argumentos para
add()
eremove()
, assim como um segundo argumentotoggle()
para forçar o estado.No momento da redação deste artigo, o Chrome suporta vários argumentos para
add()
eremove()
, mas nenhum dos outros navegadores suporta . IE 10 e inferior, Firefox 23 e inferior, Chrome 23 e inferior e outros navegadores não suportam o segundo argumento paratoggle()
.Escrevi o seguinte pequeno polyfill para me manter aquecido até que o suporte se expanda:
Um navegador moderno com conformidade com o ES5 e
DOMTokenList
é esperado, mas eu estou usando esse polyfill em vários ambientes especificamente direcionados, por isso funciona muito bem para mim, mas pode precisar de ajustes para scripts que serão executados em ambientes de navegador herdados, como o IE 8 e versões inferiores. .fonte
Você pode fazer como abaixo
Adicionar
Remover
Referência
TLDR;
No caso direto acima, a remoção deve funcionar. Mas em caso de remoção, verifique se a classe existe antes de removê-las
fonte
Aqui está uma solução para os usuários do IE 10 e 11 que pareciam bastante diretos.
Ou
fonte
A definição padrão permite apenas adicionar ou excluir uma única classe. Algumas pequenas funções do invólucro podem fazer o que você pede:
Esses wrappers permitem especificar a lista de classes como argumentos separados, como cadeias com itens separados por espaço ou vírgula ou uma combinação. Para um exemplo, consulte http://jsfiddle.net/jstoolsmith/eCqy7
fonte
Uma solução muito simples, não sofisticada, mas funcional, que eu teria que acreditar é muito diferente do navegador:
Crie esta função
Chame assim: removeAddClasses (node.classList, arrayToRemove, arrayToAdd);
... onde arrayToRemove é uma matriz de nomes de classe para remover: ['myClass1', 'myClass2'] etc.
... e arrayToAdd é uma matriz de nomes de classe para adicionar: ['myClass3', 'myClass4'] etc.
fonte
Suponha que você tenha uma matriz de classes a ser adicionada, você pode usar a sintaxe de expansão ES6:
let classes = ['first', 'second', 'third']; elem.classList.add(...classes);
fonte
Gostei da resposta de @ rich.kelly, mas queria usar a mesma nomenclatura de
classList.add()
(strings separadas por vírgula), portanto, um pequeno desvio.Então você pode usar:
Preciso testar todos os navegadores, mas isso funcionou para o Chrome.
Deveríamos procurar algo mais específico do que a existência de
DOMTokenList.prototype.addMany
? O que exatamente causaclassList.add()
uma falha no IE11?fonte
Outro polyfill para
element.classList
está aqui . Encontrei-o via MDN .Incluo esse script e o uso
element.classList.add("first","second","third")
como pretendido.fonte