Sim, use a abordagem que o @RocketHazmat usa, digamos que você tenha 5 elementos, todos prefixados com 'Registrar contrato' e cada um com um sufixo numérico. Você acabará selecionando todos eles , quando, na realidade, deseja apenas o elemento com o texto: 'Registrar contrato 26' .
Feng Huo 14/10
1
Embora: contains faça distinção entre maiúsculas e minúsculas, funcionou para mim porque passei a string de texto exata a ser encontrada.
Francisco Quintero
1
Caso ajude alguém que gosta de usar espaços em suas parênteses, o seguinte não funciona:$('div:contains( "test" )').css('background-color', 'red');
M Katz
92
Na documentação do jQuery, diz:
O texto correspondente pode aparecer diretamente dentro do elemento selecionado, em qualquer um dos descendentes desse elemento ou em uma combinação
Portanto, não basta usar o :contains()seletor , você também precisa verificar se o texto que você procura é o conteúdo direto do elemento que você está alvejando, algo assim:
function findElementByText(text){var jSpot = $("b:contains("+ text +")").filter(function(){return $(this).children().length ===0;}).parent();// because you asked the parent of that elementreturn jSpot;}
Acabei de encontrar este problema exato. Isso deve ser maior.
24715 DickieBoy
2
Esta solução pode falhar no seguinte cenário: <li>Hello <a href='#'>World</a>, How Are You. . Aqui, se Howestiver sendo pesquisado, a condição falhará, eu acho.
me_digvijay
23
Pessoal, eu sei que isso é antigo, mas ei, eu tenho essa solução que acho que funciona melhor do que todas. Em primeiro lugar, supera a sensibilidade de maiúsculas e minúsculas que o jquery: contém () é enviado com:
var text ="text";var search = $("ul li label").filter(function(){return $(this).text().toLowerCase().indexOf( text.toLowerCase())>=0;}).first();// Returns the first element that matches the text. You can return the last one with .last()
Espero que alguém no futuro próximo considere útil.
Isso funciona melhor quando o seletor retorna vários resultados e você precisa reduzi-lo a um elemento específico no qual você não tem nenhum atributo "Id" para fazer referência.
<div>div1
<div>This is a test, nested in div1</div><div>Nested in div1<div></div><div>div2 test
<div>This is another test, nested in div2</div><div>Nested in div2</div></div><div>
div3
</div><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
Respostas:
Você pode usar o
:contains
seletor para obter elementos com base em seu conteúdo.Demonstração aqui
fonte
.filter
.$('div').filter(function(){ return $(this).text().toLowerCase() === 'test';})
$('div:contains( "test" )').css('background-color', 'red');
Na documentação do jQuery, diz:
Portanto, não basta usar o
:contains()
seletor , você também precisa verificar se o texto que você procura é o conteúdo direto do elemento que você está alvejando, algo assim:fonte
<li>Hello <a href='#'>World</a>, How Are You.
. Aqui, seHow
estiver sendo pesquisado, a condição falhará, eu acho.Pessoal, eu sei que isso é antigo, mas ei, eu tenho essa solução que acho que funciona melhor do que todas. Em primeiro lugar, supera a sensibilidade de maiúsculas e minúsculas que o jquery: contém () é enviado com:
Espero que alguém no futuro próximo considere útil.
fonte
A resposta de Rocket não funciona.
Simplesmente modifiquei sua DEMO aqui e você pode ver que o DOM raiz está selecionado.
adicione o seletor " : last " no código para corrigir isso.
fonte
Melhor maneira na minha opinião.
fonte
Sim, use o
contains
seletor jQuery .fonte
O jQuery a seguir seleciona nós div que contêm texto, mas não têm filhos, que são os nós folha da árvore DOM.
fonte