Tudo bem, gostaria de saber se existe uma maneira de fazer o :contains()
seletor do jQuery selecionar elementos apenas com a string digitada.
por exemplo -
<p>hello</p>
<p>hello world</p>
$('p:contains("hello")').css('font-weight', 'bold');
O seletor selecionará os dois p
elementos e os tornará em negrito, mas quero que selecione apenas o primeiro.
jquery
jquery-selectors
juliano
fonte
fonte
:contains
seletor por seu próprio código, mas não acho que seja isso que você quis dizer?Respostas:
Não, não há seletor jQuery (ou CSS) que faça isso.
Você pode usar facilmente
filter
:Não é um seletor , mas faz o trabalho. :-)
Se você deseja lidar com espaços em branco antes ou depois do "olá", você pode inserir um
$.trim
:Para os otimizadores prematuros por aí, se você não se importa que ele não corresponda
<p><span>hello</span></p>
e similar, você pode evitar as chamadas$
etext
usandoinnerHTML
diretamente:... mas você teria que ter muitos parágrafos para que isso importasse, tantos que você provavelmente teria outros problemas primeiro. :-)
fonte
$.trim
qualquer espaço em branco perdido antes de fazer a comparação.==
(== 2
) ou colocar o número em uma string (=== "2"
), porque o valor obtidotext()
ouinnerHTML
sempre é uma string. Se você estava comparando com uma string, não importa se você usa==
ou===
.:contains
que é bem mais complexo, mas não implementou um seletor para a correspondência exata do texto. = {Tente adicionar uma função de extensão pseudo:
Então você pode fazer:
fonte
$.expr[':'].textEquals = $.expr[':'].textEquals || $.expr.createPseudo(function(arg) {
Você pode usar a função filter () do jQuery para conseguir isso.
fonte
Então a resposta de Amandu funciona principalmente. No entanto, ao usá-lo na natureza, encontrei alguns problemas em que coisas que eu esperava encontrar não estavam sendo encontradas. Isso ocorre porque, às vezes, há espaços em branco aleatórios ao redor do texto do elemento. É minha convicção que, se você estiver pesquisando "Hello World", ainda assim desejará que ele corresponda a "Hello World" ou mesmo "Hello World \ n". Assim, acabei de adicionar o método "trim ()" à função, que remove os espaços em branco circundantes, e começou a funcionar melhor.
Especificamente...
Além disso, observe que esta resposta é extremamente semelhante a Selecionar link por texto (correspondência exata)
E a nota secundária ...
trim
remove apenas os espaços em branco antes e depois do texto pesquisado. Não remove espaços em branco no meio das palavras. Acredito que esse seja um comportamento desejável, mas você pode mudar isso se quiser.fonte
Eu encontrei uma maneira que funciona para mim. Não é 100% exato, mas elimina todas as strings que contêm mais do que apenas a palavra que estou procurando, porque verifico se a string não contém espaços individuais também. A propósito, você não precisa desses "". O jQuery sabe que você está procurando uma string. Verifique se você possui apenas um espaço na parte: contains (), caso contrário não funcionará.
E sim, eu sei que não vai funcionar se você tiver coisas como
<p>helloworld</p>
fonte
Como TJ Crowder afirmou acima, a função de filtro faz maravilhas. Não estava funcionando para mim no meu caso específico. Eu precisava pesquisar várias tabelas e suas respectivas tags td dentro de uma div (neste caso, uma caixa de diálogo jQuery).
Espero que isso seja útil para alguém!
fonte
Um one-liner que trabalha com bibliotecas alternativas ao jQuery:
E isso é equivalente ao
a:contains("pattern")
seletor de um jQuery :fonte
O .first () ajudará aqui
fonte