Trouver une chaîne de texte en utilisant jQuery?

Disons qu’une page Web a une chaîne telle que “Je suis une chaîne simple” que je veux trouver. Comment pourrais-je y aller en utilisant JQuery?

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

 

Le sélecteur ci-dessus sélectionne tout élément contenant la chaîne cible. La trouvaille sera un object jQuery qui contient tout élément correspondant. Consultez les informations sur l’API à l’ adresse : http://docs.jquery.com/Selectors/contains#text

Une chose à noter avec le caractère générique ‘*’ est que vous obtiendrez tous les éléments, y compris vos éléments HTML et un corps, ce que vous ne voulez probablement pas. C’est pourquoi la plupart des exemples de jQuery et d’autres lieux utilisent $ (‘div: contains (“je suis une simple chaîne”)’)

Normalement, les sélecteurs jQuery ne recherchent pas dans les “noeuds de texte” dans le DOM. Toutefois, si vous utilisez la fonction .contents (), les noeuds de texte seront inclus, vous pourrez ensuite utiliser la propriété nodeType pour filtrer uniquement les noeuds de texte et la propriété nodeValue pour rechercher la chaîne de texte.

     $ ('*', 'body')
         .andSelf ()
         .Contenu()
         .filter (function () {
             retourner this.nodeType === 3;
         })
         .filter (function () {
             // Ne fait correspondre que lorsque contient "chaîne simple" n'importe où dans le texte
             return this.nodeValue.indexOf ('chaîne simple')! = -1;
         })
         .each (function () {
             // Faire quelque chose avec this.nodeValue
         })

Cela sélectionnera uniquement les éléments de feuille contenant “Je suis une chaîne simple”.

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

Collez les éléments suivants dans la barre d'adresse pour le tester.

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

Si vous voulez saisir juste "je suis une simple chaîne" . D'abord, enroulez le texte dans un élément comme ça.

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

et puis faites ceci.

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

Si vous voulez simplement que le nœud 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:

 

blah blah my text

En utilisant le sélecteur ci-dessus, vous trouverez la , car c’est la dernière balise qui contient cette chaîne entière.

Jetez un coup d’oeil sur highlight (plugin jQuery).

En ajoutant à la réponse de Tony Miller, cela m’a permis de trouver 90% de ce que je cherchais, mais cela n’a toujours pas fonctionné. Ajout de .length > 0; à la fin de son code, mon script a fonctionné.

  $(function() { var foundin = $('*:contains("I am a simple ssortingng")').length > 0; }); 

cette fonction devrait fonctionner. fait essentiellement une recherche récursive jusqu’à ce que nous obtenions une liste distincte de nœuds feuilles.

 function distinctNodes(search, element) { var d, e, ef; e = []; ef = []; if (element) { d = $(":contains(\""+ search + "\"):not(script)", element); } else { d = $(":contains(\""+ search + "\"):not(script)"); } if (d.length == 1) { e.push(d[0]); } else { d.each(function () { var i, r = distinctNodes(search, this); if (r.length === 0) { e.push(this); } else { for (i = 0; i < r.length; ++i) { e.push(r[i]); } } }); } $.each(e, function () { for (var i = 0; i < ef.length; ++i) { if (this === ef[i]) return; } ef.push(this); }); return ef; }