Digamos que uma página da Web tenha uma sequência como "Eu sou uma sequência simples" que desejo encontrar. Como eu faria isso usando o JQuery?
241
O jQuery possui o método contains. Aqui está um trecho para você:
<script type="text/javascript">
$(function() {
var foundin = $('*:contains("I am a simple string")');
});
</script>
O seletor acima seleciona qualquer elemento que contenha a sequência de destino. O foundin será um objeto jQuery que contém qualquer elemento correspondente. Consulte as informações da API em: https://api.jquery.com/contains-selector/
Uma coisa a se notar com o curinga '*' é que você obterá todos os elementos, incluindo os elementos html e body, que provavelmente não deseja. É por isso que a maioria dos exemplos no jQuery e em outros lugares usa $ ('div: contains ("sou uma string simples")')
Normalmente, os seletores de jQuery não pesquisam nos "nós de texto" no DOM. No entanto, se você usar a função .contents (), os nós de texto serão incluídos, e você poderá usar a propriedade nodeType para filtrar apenas os nós de texto e a propriedade nodeValue para pesquisar a sequência de texto.
fonte
.andSelf()
. Em api.jquery.com/andSelf : "os objetos jQuery mantêm uma pilha interna que controla as alterações no conjunto de elementos correspondente. Quando um dos métodos de passagem DOM é chamado, o novo conjunto de elementos é empurrado para a pilha. Se o conjunto anterior de elementos também é desejado, .eSelf () pode ajudar. " Não vejo contexto anterior, o que estou perdendo?Isso selecionará apenas os elementos da folha que contêm "Eu sou uma sequência simples".
Cole o seguinte na barra de endereço para testá-lo.
Se você quiser pegar apenas "Eu sou uma string simples" . Primeiro, envolva o texto em um elemento como esse.
e então faça isso.
fonte
Se você deseja apenas o nó mais próximo do texto que está procurando, você pode usar o seguinte:
Isso funcionará mesmo se o seu HTML estiver assim:
O uso do seletor acima encontrará a
<strong>
tag, pois essa é a última tag que contém toda a string.fonte
<p>my text <b>my text</b></p>
- remover os ancestrais da<b>
tag perder a outra partidaDê uma olhada no destaque (plugin jQuery).
fonte
Apenas adicionando à resposta de Tony Miller, isso me deu 90% do que eu estava procurando, mas ainda não funcionou. Adicionando
.length > 0;
ao final de seu código, meu script funcionou.fonte
foundin += '*';
esta função deve funcionar. basicamente faz uma pesquisa recursiva até obter uma lista distinta de nós de folha.
fonte