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?
Réponses
Trop de publicités?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")')
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 });
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");
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.
Jetez un oeil à mettre en évidence (plugin jQuery).