2010-02-27 5 views
12

Gram w kółko ze znajdowaniem i zamianą tekstu.jquery znajdź i zamień tekst bez elementu id

Jedyny problem, jaki mam, to znalezienie ciągu tekstowego, który nie jest dołączony do elementu z identyfikatorem. W przeciwnym razie byłoby to łatwe.

Próbuję coś takiego:

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

Nie działa zbyt dobrze.
Czy ktoś już kiedyś to robił?

Ponadto, jeśli mam kilka słów lub wyrażeń do znalezienia i zamiany, jak to wpływa na szybkość/moc obliczeniową przeglądarki użytkownika? Czy to jest świnia pamięci?

Odpowiedz

6

Takpar Twój kod działa zbyt. Wydaje się, że powstrzymuje to kilka innych rzeczy od pracy, ale tylko przedmioty, które ciągnę dynamicznie. Na przykład, gdy używam .ajax(). Nie wiem dlaczego, ale właśnie dlatego wpadłem. Będę testować więcej.

Na tematu pokrewnego, kod Gumbo za prace:

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

Jedyne używam do problemów z wymianą jest tekst, który jest załadowany po załadowaniu strony.

Mam niektóre funkcje javascript, które wyświetlają dane z serwera, ale tylko po załadowaniu wszystkich elementów strony. Na przykład użytkownik wybiera wartość z menu rozwijanego, które inicjuje zdarzenie, aby załadować listę produktów z bazy danych.

formatować niektóre z tych produktów, takich jak ten:

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

Ja tylko chce znaleźć zastąpić słowo „Cena” i ewentualnie wymienić go na „koszt”.

Ale jak już wspomniałem, dane nie zostały jeszcze załadowane.

Czy mam limit, z którym muszę żyć?

+0

działa to dobrze w nowoczesnych przeglądarkach, które przekazałem przez JS Lint i powiedziałem, że brakuje jednego znaku równości '=', więc dodałem go. Jak mogę uczynić to kompatybilnym z IE8 -IE7? @ coffeemonitor @jellybelly – breezy

1

Potrzebujesz selektora :contains(). http://api.jquery.com/contains-selector/

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

Oczywiście, tak konkretna, jak tylko możesz być najlepsza. –

+1

'contains" nie jest dobrym pomysłem: "Dopasowany tekst może pojawić się bezpośrednio w wybranym elemencie, * w dowolnym potomku tego elementu lub ich kombinacji *." – Gumbo

+0

Prawdziwy tylko, jeśli nie chcesz go zastąpić w potomkach. –

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

+1 To była moja następna myśl. ;-) – Gumbo

4

dlaczego nie można po prostu użyć:

$('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")); 
}});