Como você faz jQuery hasClass
com JavaScript simples? Por exemplo,
<body class="foo thatClass bar">
Qual é a maneira do JavaScript de perguntar se <body>
existe thatClass
?
javascript
dom
Kyle
fonte
fonte
class
propriedade (que no caso de várias classes terá vários nomes de classes em ordem aleatória, separados por um espaço) e verificar se o nome da sua classe está nela. Não terrivelmente difícil, mas ainda terrivelmente inconveniente, se não para fins de aprendizagem :)Respostas:
Você pode verificar se
element.className
corresponde/\bthatClass\b/
.\b
corresponde a uma quebra de palavra.Ou, você pode usar a própria implementação do jQuery:
Para responder sua pergunta mais geral, você pode consultar o código-fonte do jQuery no github ou na fonte,
hasClass
especificamente neste visualizador de código-fonte .fonte
rclass
realmente é;))\b
corresponderia a "thatClass-anotherClass"?/[\t\r\n\f]/g
. Também é bom mencionar que/\bclass\b/
pode falhar para nomes de classes com-
sinal de menos (exceto que funcione bem), é por isso que a implementação do jQuery é melhor e mais confiável. Por exemplo:/\bbig\b/.test('big-text')
retorna verdadeiro em vez de falso esperado.Basta usar
classList.contains()
:Outros usos de
classList
:Suporte do navegador:
classList
Suporte do navegadorfonte
.classList
como uma string, mas não vai reconhecer os métodos mais modernos, tais como.classList.contains()
O forro mais eficaz que
thisClass
em um elemento que possuiclass="thisClass-suffix"
.fonte
O atributo que armazena as classes em uso é
className
.Então você pode dizer:
Se você deseja um local que mostre como o jQuery faz tudo, sugiro:
http://code.jquery.com/jquery-1.5.js
fonte
match
atributo é útil novamente! Realmente jQuery faz algo mais do que é possível em JavaScript ?! Caso contrário, o jQuery é apenas um peso desnecessário de taquigrafia.myclass-something
, como\b
corresponde ao hífen.fonte
Função hasClass:
Função addClass:
função removeClass:
fonte
Eu uso uma solução simples / mínima, uma linha, entre navegadores e também funciona com navegadores herdados:
Esse método é ótimo porque não requer polyfills e, se você usá-los
classList
, é muito melhor em termos de desempenho. Pelo menos para mim.Atualização: criei um pequeno polyfill que é uma solução completa que uso agora:
Para a outra manipulação de classe, veja o arquivo completo aqui .
fonte
notmyClassHere
?!/myClass/.test(document.body.className)
observar o!
símbolo.thisIsmyClassHere
.Uma boa solução para isso é trabalhar com classList e contains.
eu fiz assim:
Então você precisa do seu elemento e verifique a lista de classes. Se uma das classes for a mesma que você procura, ela retornará true, caso contrário, retornará false!
fonte
Use algo como:
fonte
myHTMLSelector.classList.indexOf('the-class')
? Você também não quer>=0
no final?[].indexOf
seclassList
tem umcontains
método?myHTMLSelector.classList.indexOf('the-class')
retorna o erro que,myHTMLSelector.classList.indexOf is not a function
porquemyHTMLSelector.classList
não é uma matriz. Mas acho que ao chamá-lo usandoArray.prototype
alguma conversão acontece. Isso pode suportar navegadores mais antigos, emboracontains
tenha um suporte muito bom.fonte
Essa função 'hasClass' funciona no IE8 +, FireFox e Chrome:
fonte
Bem, todas as respostas acima são muito boas, mas aqui está uma pequena função simples que eu criei. Funciona muito bem.
fonte
classList
tem umcontains
método?O que você acha dessa abordagem?
https://jsfiddle.net/5sv30bhe/
fonte
class="nothatClassIsnt"
?Aqui está a maneira mais simples:
fonte