Se eu tiver o seguinte:
<div class="apple-monkey"></div>
<div class="apple-horse"></div>
<div class="cow-apple-brick"></div>
Posso usar o seguinte seletor para encontrar os dois primeiros DIVs:
$("div[class^='apple-']")
No entanto, se eu tiver isso:
<div class="some-other-class apple-monkey"></div>
<div class="apple-horse"></div>
<div class="cow-apple-brick"></div>
Ele só encontrará o segundo DIV, já que a classe da primeira div é retornada como uma string (acho) e, na verdade, não começa com 'apple-', mas sim 'some-'
Uma maneira de contornar isso é não usar, começa com, mas contém:
$("div[class*='apple-']")
O problema é que ele também selecionará o 3º DIV no meu exemplo.
Pergunta: Por jQuery, qual é a maneira correta de usar seletores de predicado em nomes de classes individuais, em vez de todo o atributo de classe como uma string? É apenas uma questão de pegar a CLASS, dividi-la em uma matriz e, em seguida, percorrer cada uma com regex? Ou existe uma solução mais elegante / menos detalhada?
var divs = $("div[class^='apple-']"); if(divs.length == 0) divs = $("div[class*=' apple-']");
Eu recomendo fazer "apple" sua própria classe. Você deve evitar o início com / termina com, se puder, porque ser capaz de selecionar usando
div.apple
seria muito mais rápido. Essa é a solução mais elegante. Não tenha medo de dividir as coisas em classes separadas, se isso tornar a tarefa mais simples / rápida.fonte
isto é para prefixo com
$("div[class^='apple-']")
isso é para começar, então você não precisa ter o '-' char lá
$("div[class|='apple']")
você pode encontrar várias outras variações interessantes do seletor jQuery aqui https://api.jquery.com/category/selectors/
fonte
Embora a resposta principal aqui seja uma solução alternativa para o caso específico do solicitante, se você estiver procurando uma solução para realmente usar 'começa com' em nomes de classes individuais:
Você pode usar esse seletor jQuery personalizado, que chamo
:acp()
de "Um prefixo de classe". O código está na parte inferior desta postagem.Isso selecionará todos e quaisquer
<div>
elementos que tenham pelo menos um nome de classe começando com a sequência especificada ("texto_de_inicialização" neste exemplo), independentemente de essa classe estar no início ou em outro lugar nas sequências de atributos da classe.Isso retornará os elementos 1, 2 e 3, mas não 4 ou 5.
Aqui está a declaração do
:acp
seletor personalizado, que você pode colocar em qualquer lugar:Fiz isso porque faço muitos hackers no GreaseMonkey de sites nos quais não tenho controle de back-end; portanto, muitas vezes preciso encontrar elementos com nomes de classes que tenham sufixos dinâmicos. Tem sido muito útil.
fonte
Tente o seguinte:
fonte
nesse caso, como a resposta de Josh Stodola da pergunta está correta Classes que começam com "apple-" mais classes que contêm "apple-"
mas se o elemento tiver várias classes como esta
então a solução de Josh Stodola não funcionará,
pois isso tem que fazer algo assim
pode ser que ajuda alguém mais graças
fonte
Se um elemento tiver múltiplas classes "[class ^ = 'apple-']" não funcionará, por exemplo,
fonte