Existe uma maneira no jQuery de percorrer ou atribuir a uma matriz todas as classes atribuídas a um elemento?
ex.
<div class="Lorem ipsum dolor_spec sit amet">Hello World!</div>
Vou procurar uma classe "especial" como em "dolor_spec" acima. Eu sei que eu poderia usar hasClass (), mas o nome da classe real pode não ser necessariamente conhecido no momento.
javascript
jquery
html
Buggabill
fonte
fonte
Respostas:
Você pode usar
document.getElementById('divId').className.split(/\s+/);
para obter uma matriz de nomes de classe.Em seguida, você pode iterar e encontrar o que deseja.
jQuery realmente não ajuda você aqui ...
fonte
$.fn.classList = function() {return this[0].className.split(/\s+/);};
if ($.inArray("someclass",classList)>=0) { /* hasClass someclass*/ }
Por que ninguém simplesmente listou.
EDIT: Como o @MarkAmery aponta, você não pode apenas
.split(' ')
porque os nomes das classes podem ser separados por qualquer tipo de espaço em branco.fonte
$('<div class="foo bar baz">').attr("class").split(' ')
no console do navegador (há um caractere de tabulação); você receberá em["foo", "bar baz"]
vez da lista correta de classes de["foo", "bar", "baz"]
.class="foo <lots of spaces here> bar"
, você acabaria com uma matriz com elementos de string vazios.Nos navegadores de suporte, você pode usar a
classList
propriedade dos elementos DOM .É um objeto de matriz que lista todas as classes que o elemento possui.
Se você precisar oferecer suporte a versões antigas de navegadores que não suportam a
classList
propriedade, a página MDN vinculada também incluirá um calço para ela - embora mesmo o calço não funcione nas versões do Internet Explorer abaixo do IE 8.fonte
.classList
não é uma matriz verdadeira e métodos como esse.indexOf(⋯)
não funcionam. É apenas um "objeto parecido com um array", enquanto.className.split(/\s+/).indexOf(⋯)
(a partir da resposta aceita) funciona.Array
uso[...iterable]
ouArray.from(iterable)
Aqui está um plugin jQuery que retornará uma matriz de todas as classes que os elementos correspondentes possuem
Use-o como
No seu caso retorna
Você também pode passar uma função para o método a ser chamado em cada classe
Aqui está um jsFiddle que eu configurei para demonstrar e testar http://jsfiddle.net/GD8Qn/8/
Javascript reduzido
fonte
Você deve tentar este:
Retorna uma matriz de todas as classes atuais do elemento.
fonte
.classList
a solução é simples - você só precisa prestar atenção às inconsistências e / ou à falta de suporte ao navegador..classList
que funciona muito bem em navegadores modernosclassList
propriedade não funciona no IE 10/11 para elementos SVG (embora funcione para elementos HTML). Veja developer.mozilla.org/pt-BR/docs/Web/API/Element/classListfonte
Atualizar:
Como @Ryan Leonard apontou corretamente, minha resposta realmente não corrige o que eu disse ... Você precisa aparar e remover espaços duplos com (por exemplo) string.replace (/ + / g, "") .. Ou você pode dividir o el.className e remover valores vazios com (por exemplo) arr.filter (booleano).
ou mais moderno
Velho:
Com todas as respostas fornecidas, você nunca deve esquecer do usuário .trim () (ou $ .trim ())
Como as classes são adicionadas e removidas, pode acontecer que haja vários espaços entre as strings da classe. Por exemplo, 'class1 class2 class3' ..
Isso se transformaria em ['class1', 'class2', '', '', '', 'class3'] ..
Quando você usa o recorte, todos os vários espaços são removidos.
fonte
.classList
é uma abordagem muito mais limpa!fonte
.map
; use.each
se você não precisar.map
do valor de retorno. Dividir os espaços em vez de qualquer espaço em branco também está quebrado - veja meu comentário em stackoverflow.com/a/10159062/1709587 . Mesmo se nenhum desses pontos for verdadeiro, isso não adiciona nada de novo à página. -1!Isso pode ajudá-lo também. Eu usei essa função para obter classes de elemento childern ..
No seu caso, você quer a classe doler_ipsum que você pode fazer assim agora
calsses[2];
.fonte
Obrigado por isso - eu estava tendo um problema semelhante, pois estou tentando relacionar objetos de forma programática com nomes de classes hierárquicos, mesmo que esses nomes não sejam necessariamente conhecidos pelo meu script.
No meu script, quero que uma
<a>
tag ative / desative o texto de ajuda, atribuindo a<a>
tag[some_class]
mais a classe detoggle
e, em seguida, dando a ela o texto de ajuda da classe[some_class]_toggle
. Este código está localizando com sucesso os elementos relacionados usando o jQuery:fonte
Tente isto. Isso fornecerá os nomes de todas as classes de todos os elementos do documento.
});
Aqui está o exemplo de trabalho: https://jsfiddle.net/raju_sumit/2xu1ujoy/3/
fonte
Eu tive um problema semelhante, para um elemento do tipo imagem. Eu precisava verificar se o elemento era de uma determinada classe. Primeiro eu tentei com:
mas recebi uma boa "esta função não está disponível para este elemento".
Depois, inspecionei meu elemento no explorador DOM e vi um atributo muito bom que eu poderia usar: className. Ele continha os nomes de todas as classes do meu elemento separadas por espaços em branco.
Depois de conseguir isso, basta dividir a corda como de costume.
No meu caso, isso funcionou:
Estou assumindo que isso funcionaria com outros tipos de elementos (além de img).
Espero que ajude.
fonte
javascript fornece um atributo classList para um elemento de nó no dom. Simplesmente usando
retornará um objeto de formulário
O objeto possui funções como contém, adiciona e remove as quais você pode usar
fonte
Um pouco atrasado, mas o uso da função extend () permite chamar "hasClass ()" em qualquer elemento, por exemplo:
var hasClass = $('#divId').hasClass('someClass');
fonte
A questão é o que o Jquery foi projetado para fazer.
E por que ninguém deu .find () como resposta?
Também há classList para navegadores que não sejam o IE:
fonte
Aqui está, apenas a resposta do readquare ajustada para retornar uma matriz de todas as classes:
Passe um elemento jQuery para a função, para que uma chamada de amostra seja:
fonte
$(elem).attr('class').split(/\s+/)
isso. Talvez eu esteja enganado, mas não vejo nenhum motivo para percorrer uma coleção, copiar o conteúdo para uma nova coleção e retornar essa nova coleção.Eu sei que esta é uma pergunta antiga, mas ainda assim.
Se você deseja manipular o elemento
Se você deseja verificar se o elemento tem classe
se várias classes
fonte