J'ai quelque part sur le site Web un texte spécifique, disons "lollypops", et je souhaite remplacer toutes les occurrences de cette chaîne par "marshmellows". Le problème est que je ne sais pas où se trouve exactement le texte. Je sais que je pourrais faire quelque chose comme:
$(body).html($(body).html().replace('lollypops', 'marshmellows'));
Cela fonctionnerait probablement, mais je dois réécrire le moins de code HTML possible. Je pense donc à quelque chose comme:
class
, mais pas dans src
Par exemple, j'aurais une structure comme celle-ci
<body>
<div>
<div>
<p>
<h1>
<a>lollypops</a>
</h1>
</p>
<span>lollypops</span>
</div>
</div>
<p>
<span class="lollypops">Hello, World!</span>
<img src="/lollypops.jpg" alt="Cool image" />
</p>
<body>
Dans cet exemple, chaque occurrence de "lollypops" serait remplacée, seul <img src="...
resterait identique et les seuls éléments réellement manipulés seraient <a>
et les deux <span>
s.
Est-ce que quelqu'un sait comment faire cela?
Vous pouvez faire quelque chose comme ça:
$("span, p").each(function() {
var text = $(this).text();
text = text.replace("lollypops", "marshmellows");
$(this).text(text);
});
Il sera préférable de marquer toutes les balises avec du texte devant être examiné avec un nom de classe approprié.
Cela peut également poser des problèmes de performances. jQuery ou javascript en général ne conviennent pas vraiment à ce type d'opérations. Vous feriez mieux de le faire côté serveur.
Vous pouvez faire quelque chose de cette façon:
$(document.body).find('*').each(function() {
if($(this).hasClass('lollypops')){ //class replacing..many ways to do this :)
$(this).removeClass('lollypops');
$(this).addClass('marshmellows');
}
var tmp = $(this).children().remove(); //removing and saving children to a tmp obj
var text = $(this).text(); //getting just current node text
text = text.replace(/lollypops/g, "marshmellows"); //replacing every lollypops occurence with marshmellows
$(this).text(text); //setting text
$(this).append(tmp); //re-append 'foundlings'
});
exemple: http://jsfiddle.net/steweb/MhQZD/
Vous trouverez ci-dessous le code que j'ai utilisé pour remplacer du texte, par du texte coloré. C'est simple, prenez le texte et remplacez-le par une balise HTML
. Cela fonctionne pour chaque mot de cette balise de classe.
$('.hightlight').each(function(){
//highlight_words('going', this);
var high = 'going';
high = high.replace(/\W/g, '');
var str = high.split(" ");
var text = $(this).text();
text = text.replace(str, "<span style='color: blue'>"+str+"</span>");
$(this).html(text);
});
var string ='my string'
var new_string = string.replace('string','new string');
alert(string);
alert(new_string);