div Trouver une chaîne de texte en utilisant jQuery?




jquery text (6)

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?


cette fonction devrait fonctionner. fondamentalement fait une recherche récursive jusqu'à ce que nous obtenions une liste distincte des noeuds de feuille.

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;
}

Juste ajouter à la réponse de Tony Miller comme cela m'a obtenu 90% vers ce que je cherchais mais ne fonctionnait toujours pas. Ajouter .length > 0; à la fin de son code a fonctionné mon script.

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

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 sélectionne tout élément contenant la chaîne cible. Le foundin sera un objet jQuery qui contient n'importe quel élément correspondant. Consultez les informations sur l'API à l' http://docs.jquery.com/Selectors/contains#text : 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 votre html et les éléments du corps, que vous ne voulez probablement pas. C'est pourquoi la plupart des exemples de jQuery et d'autres endroits utilisent $ ('div: contains ("Je suis une simple chaîne")')


Jetez un oeil à highlight (plugin jQuery).


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>

En utilisant le sélecteur ci-dessus, vous trouverez la <strong> , car c'est la dernière balise qui contient toute cette chaîne.


Ceci sélectionnera seulement les éléments de feuille qui contiennent "Je suis une chaîne simple".

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

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

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

Si vous voulez saisir juste "je suis une chaîne simple" . Enveloppez d'abord le texte dans un élément comme celui-ci.

$('*: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 faites-le.

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




text