2010-12-15 15 views
5

Próbuję znaleźć rozwiązanie, aby wyszukać ciąg tekstowy "Tony" zawarty w DOM i zastąpić go ciągiem tekstowym "Tygrys".Jak znaleźć tekst i zastąpić za pomocą jQuery

Ktoś ma jakiś wgląd lub pomysły, jak to zrobić? Zgaduję, że zajmie to każde oświadczenie w połączeniu z funkcją zamiany i ewentualnie zawiera?

Dzięki Jake

+2

Więcej szczegółów, proszę. Czy masz jakieś pojęcie o _ gdzie indziej w DOM-ie? Czy chcesz zastąpić _every_ występowanie 'Tony' z' Tigerem' bez względu na to, gdzie występuje? –

+0

czy masz do tego pojemnik html? lub jego prosta zastąpić wszystkie – kobe

+0

Tak, chcę zastąpić każde wystąpienie "Tony" z "Tigerem" - gdziekolwiek w DOM leży - musi prawdopodobnie w ramach elementu .container. – jrutter

Odpowiedz

18

Można to wykorzystać, aby wyszukać wszystkie dzieci elementu ciała i zastąpić tekst ...

$('body').children().each(function(){$(this).text($(this).text().replace('Tony','Tiger'))}); 

wykorzystuje jQuery. To również powinno zmieniać tylko zawartość tekstową i żaden z elementów formatowania HTML ...

Można również użyć tej metody, która używa RegExp i dostanie wszystkie zagnieżdżone elementy:

$('body').html($('body').html().replace(/Tony/gi,'tiger')); 
+0

To nie zadziała, ponieważ 'children()' nie rekurencyjnie przeszukuje DOM - daje tylko bezpośrednie potomstwo. –

+0

Nie działa na mojej stronie: http://www.laithwaiteswine.com $ (". Container"). Children(). Each (function() {$ (this) .text ($ (this) .text() .replace ("Laithwaites", "Tiger"))}); - Usuwa cały DOM lub go rozbija. – jrutter

+1

@jrutter: Nie wiem, dlaczego tak się dzieje, nie widząc kodu. Jednak ulepszyłem swoje rozwiązanie alternatywnym za pomocą podejścia RegExp ---> $ ("body"). Html ($ ("body"). Html(). Replace (/ Tony/gi, "tygrys")); – exoboy

5

Page szeroki, można użyć coś takiego:

var $body = $('body'); 
var html = $body.html(); 
var newHtml = html.replace('Tony', 'Tiger'); 
$body.html(newHtml); 

Albo, jeśli masz bardziej konkretny pojemnik, używać jQuery, aby zaznaczyć, że pojemnik na dziecko i zrobić to samo .

Tak czy inaczej, jest to rodzaj podejścia typu shotgun. Zmieni ciąg znaków zarówno w widocznym tekście, jak iw atrybutach elementu html. Bardziej szczegółowe podejście może być konieczne, jeśli łańcuch musi być ignorowany w niektórych lokalizacjach.

+0

To nie działa, cała strona ładuje się ponownie. – jrutter

3

jest to możliwe połączyć to z rozwiązaniem po stronie serwera? Możesz zawijać każdą stronę strony ze słowem specjalną klasą, taką jak <span class="replaceme">texttoreplace</span>.

Uruchamianie zastępowania javascript na wynikowych klasach powinno przyspieszyć działanie.

+1

+1 zdecydowanie lepiej niż wyszukiwanie DOM dla tekstu. –

+1

Jeśli to możliwe, dlaczego nie zastąpi ciąg po stronie serwera na początek? Dodawanie niepotrzebnych elementów dom wydaje się nadmierne – ximi

Powiązane problemy