249 votes

Trouver une chaîne de texte en utilisant jQuery?

Dites qu'une page Web a une chaîne telle que "Je suis une chaîne simple" que je veux trouver. Comment j'y arriverais en utilisant JQuery?

338voto

Tony Miller Points 6521

jQuery a la méthode contains. Voici un extrait pour vous:

<script type="text/javascript">
$(function() {
    var foundin = $('*:contains("I am a simple string")');
});
</script>

Le sélecteur ci-dessus permet de sélectionner tous les élément qui contient la chaîne de caractères. Le foundin sera un objet jQuery qui contient un d'eux correspond à l'élément. Voir les informations de l'API: http://docs.jquery.com/Selectors/contains#text

Une chose à noter avec le '*' joker, c'est que vous aurez tous les éléments, y compris votre code html à l'un des éléments du corps, vous ne voulez probablement pas. C'est pourquoi la plupart des exemples à jQuery et autres lieux d'utiliser $('div:contains("je suis une simple chaîne de caractères")')

51voto

BarelyFitz Points 1196

Normalement, les sélecteurs jQuery ne sont pas la recherche au sein de la "nœuds de texte" dans les DOM. Toutefois, si vous utilisez l' .contenu de la fonction (), les nœuds de texte sera inclus, vous pouvez utiliser la propriété nodeType pour filtrer uniquement les nœuds de texte, et la propriété nodeValue à la recherche de la chaîne de texte.

 $('*', 'body')
.andSelf()
.contenu()
.filter(function(){
 de retour cette.nodeType === 3;
})
.filter(function(){
 // Uniquement de match, contient 'chaîne de caractères' n'importe où dans le texte
 de retour cette.nodeValue.indexOf('chaîne de caractères') != -1;
})
.each(function(){
 // Faire quelque chose avec ça.nodeValue
});

32voto

Slim Points 1415

Cela permet de sélectionner simplement la feuille éléments qui contiennent "je suis une simple chaîne de caractères".

$('*:contains("I am a simple string")').each(function(){
     if($(this).children().length < 1) 
          $(this).css("border","solid 2px red") });

Collez le texte suivant dans la barre d'adresse pour le tester.

javascript: $('*:contient("je suis une simple chaîne de caractères")').each(function(){ if($(this).les enfants().length < 1) $(this).css("border","2px solid red") }); return false;

Si vous voulez prendre juste "je suis une simple chaîne de caractères". D'abord le texte à la ligne dans un élément comme si.

$('*:contains("I am a simple string")').each(function(){
     if($(this).children().length < 1) 
          $(this).html( 
               $(this).text().replace(
                    /"I am a simple string"/
                    ,'<span containsStringImLookingFor="true">"I am a simple string"</span>' 
               )  
           ) 
});

et puis le faire.

$('*[containsStringImLookingFor]').css("border","solid 2px red");

17voto

nickf Points 185423

Si vous voulez juste le noeud le plus proche du texte que vous recherchez, vous pouvez utiliser ceci:

 $('*:contains("my text"):last');
 

Cela fonctionnera même si votre HTML ressemble à ceci:

 <p> blah blah <strong>my <em>text</em></strong></p>
 

Utiliser le sélecteur ci-dessus trouvera la balise <strong> , puisque c'est la dernière balise qui contient toute cette chaîne.

13voto

Chris Doggett Points 9987

Jetez un oeil à mettre en évidence (plugin jQuery).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X