2010-02-27 5 views
12

Ich spiele herum mit dem Suchen und Ersetzen von Text.jquery finde und ersetze Text, ohne Element ID

Das einzige Problem, das ich habe, ist eine Textzeichenfolge zu finden, die nicht an ein Element mit einer ID angehängt ist. Sonst wäre es einfach.

ich so etwas wie dieses bin versucht:

$("*").each(function() { 
    $(this).html(this.html().replace('Original Text','New Text')); 
}); 

Nicht zu gut funktioniert.
Wer ist schon einmal darauf gestoßen?

Auch, wenn ich mehrere Wörter oder Ausdrücke zu finden und zu ersetzen habe, wie wirkt sich das auf die Geschwindigkeit/Verarbeitungsleistung des Browsers des Benutzers aus? Ist es ein Gedächtnisschwein?

Antwort

6

Takpar, Ihr Code funktioniert auch. Es scheint ein paar andere Dinge vom Arbeiten abzuhalten, aber nur Dinge, die ich dynamisch ziehe. Zum Beispiel, wenn ich .ajax() verwende. Ich weiß nicht warum, aber deshalb bin ich reingerannt. Ich werde mehr testen.

Auf einem verwandten Thema Gumbos Code funktioniert:

$("*").each(function() { 
    if ($(this).children().length == 0) { 
     $(this).text($(this).text().replace('Subject:','Name:')); 
    } 
}); 

Das einzige, was ich in Probleme renne mit dem Text ersetzt, die nach dem Laden der Seite geladen wird.

Ich habe einige JavaScript-Funktionen, die Daten vom Server anzeigen, aber erst nachdem die Seite alle Elemente geladen hat. Beispielsweise wählt ein Benutzer einen Wert aus einer Dropdown-Liste aus, die ein Ereignis zum Laden einer Liste von Produkten aus der Datenbank initiiert.

ich einige dieser Produkte, wie dieses Format: „Preis:“ und möglicherweise ersetzen Sie es mit

Granny Smith Apples 
Price: x.xx per pound 
Nutritional facts.... 

Ich werde nur das Wort ersetzen finden wollen „Kosten“.

Aber wie schon erwähnt, sind diese Daten noch nicht geladen.

Ist ein Limit, mit dem ich leben muss?

+0

das funktioniert gut in modernen Browsern Ich habe dies durch JS Lint und es sagte, dass Sie ein '=' Gleichheitszeichen fehlten, also habe ich es hinzugefügt. Wie kann ich dies mit IE8-IE7 kompatibel machen? @coffeemonitor @ jellybelly – breezy

1

Sie möchten den :contains() Selektor. http://api.jquery.com/contains-selector/

$("*:contains('Original Text')").each(...); 
+0

Natürlich ist es am besten, so spezifisch wie möglich zu sein. –

+1

': contains' ist keine gute Idee:" Der übereinstimmende Text kann direkt innerhalb des ausgewählten Elements erscheinen, * in einem der Nachkommen dieses Elements oder einer Kombination davon *. " – Gumbo

+0

Nur wahr, wenn Sie es nicht ersetzen wollen in Nachkommen. –

20
$("*").contents().each(function() { 
    if(this.nodeType == 3) 
     this.nodeValue = this.nodeValue.replace("old", "new"); 
}); 
+1

+1 Das war mein nächster Gedanke. ;-) – Gumbo

4

, warum Sie nicht einfach verwenden:

$('body').html($('body').html().replace('Original Text','New Text')); 
0
$("*").each(function() { 
if ($(this).children().length == 0){ 
    $(this).html($(this).html().replace(/Old String/g, "New String")); 
}});