Tenho em algum lugar do site um texto específico, digamos "pirulitos", e quero substituir todas as ocorrências dessa string por "marshmellows". O problema é que não sei exatamente onde está o texto. Eu sei que poderia fazer algo como:
$(body).html($(body).html().replace('lollypops', 'marshmellows'));
Isso provavelmente funcionaria, mas preciso reescrever o mínimo de HTML possível, então estou pensando em algo como:
- procure a string
- encontre o elemento pai mais próximo
- reescrever apenas o elemento pai mais próximo
- substitua isso mesmo em atributos, mas não em todos, por exemplo, substitua em
class
, mas não emsrc
Por exemplo, eu teria uma estrutura como esta
<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>
Neste exemplo, cada ocorrência de "pirulitos" seria substituída, apenas <img src="...
permaneceria igual e os únicos elementos que seriam realmente manipulados seriam <a>
e ambos <span>
.
Alguém sabe como fazer isto?
Respostas:
Você poderia fazer algo assim:
$("span, p").each(function() { var text = $(this).text(); text = text.replace("lollypops", "marshmellows"); $(this).text(text); });
Será melhor marcar todas as tags com texto que precisa ser examinado com um nome de classe adequado.
Além disso, isso pode ter problemas de desempenho. jQuery ou javascript em geral não são adequados para este tipo de operações. É melhor fazê-lo no lado do servidor.
fonte
<span>
, pode estar em<h4>
e assim por diante ...Você poderia fazer algo assim:
$(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' });
exemplo: http://jsfiddle.net/steweb/MhQZD/
fonte
Abaixo está o código que usei para substituir algum texto, por texto colorido. É simples, pegue o texto e coloque dentro de uma
HTML
tag. Funciona para cada palavra nas marcas dessa 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); });
fonte
var string ='my string' var new_string = string.replace('string','new string'); alert(string); alert(new_string);
fonte
Você poderia fazer algo assim:
HTML
<div class="element"> <span>Hi, I am Murtaza</span> </div>
jQuery
$(".element span").text(function(index, text) { return text.replace('am', 'am not'); });
fonte
Por que você simplesmente não adiciona uma classe ao contêiner de string e, em seguida, substitui o texto interno? Exatamente como neste exemplo.
HTML:
<div> <div> <p> <h1> <a class="swapText">lollipops</a> </h1> </p> <span class="swapText">lollipops</span> </div> </div> <p> <span class="lollipops">Hello, World!</span> <img src="/lollipops.jpg" alt="Cool image" /> </p>
jQuery:
$(document).ready(function() { $('.swapText').text("marshmallows"); });
fonte