Mam gdzieś na stronie określony tekst, powiedzmy „lizaki”, i chcę zamienić wszystkie wystąpienia tego ciągu na „pianki”. Problem w tym, że nie wiem, gdzie dokładnie jest tekst. Wiem, że mógłbym zrobić coś takiego:
$(body).html($(body).html().replace('lollypops', 'marshmellows'));
To prawdopodobnie by zadziałało, ale muszę przepisać jak najmniej kodu HTML, więc myślę o czymś takim:
- wyszukaj ciąg
- znajdź najbliższy element nadrzędny
- przepisz tylko najbliższy element nadrzędny
- zamień to nawet w atrybutach, ale nie we wszystkich, na przykład zamień to w
class
, ale nie wsrc
Na przykład miałbym taką strukturę
<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>
W tym przykładzie każde wystąpienie „lizaków” zostanie zastąpione, <img src="...
pozostanie tylko takie samo, a jedynymi elementami, które faktycznie zostaną zmanipulowane, będą <a>
i oba <span>
.
Czy ktoś wie, jak to zrobić?
javascript
jquery
jquery-selectors
szyfrować
źródło
źródło
Odpowiedzi:
Możesz zrobić coś takiego:
$("span, p").each(function() { var text = $(this).text(); text = text.replace("lollypops", "marshmellows"); $(this).text(text); });
Lepiej będzie oznaczyć wszystkie tagi tekstem, który ma zostać zbadany, odpowiednią nazwą klasy.
Może to również powodować problemy z wydajnością. jQuery lub javascript w ogóle nie nadają się do tego rodzaju operacji. Lepiej zrobić to po stronie serwera.
źródło
<span>
środku, może być<h4>
i tak dalej ...Możesz zrobić coś w ten sposób:
$(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' });
przykład: http://jsfiddle.net/steweb/MhQZD/
źródło
Poniżej znajduje się kod, którego użyłem do zastąpienia tekstu kolorowym tekstem. To proste, wziąłem tekst i zastąpiono go
HTML
tagiem. Działa dla każdego słowa w tagach tej klasy.$('.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); });
źródło
var string ='my string' var new_string = string.replace('string','new string'); alert(string); alert(new_string);
źródło
Możesz zrobić coś takiego:
HTML
<div class="element"> <span>Hi, I am Murtaza</span> </div>
jQuery
$(".element span").text(function(index, text) { return text.replace('am', 'am not'); });
źródło
Dlaczego po prostu nie dodajesz klasy do kontenera ciągów, a następnie nie zastępujesz wewnętrznego tekstu? Tak jak w tym przykładzie.
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"); });
źródło