2010-02-27 28 views
12

Estoy jugando para encontrar y reemplazar texto.jquery buscar y reemplazar texto, sin elemento id

El único problema que tengo es encontrar una cadena de texto, que no esté unida a un elemento con una ID. De lo contrario, sería fácil.

estoy intentando algo como esto:

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

No funciona demasiado bien.
¿Alguien se encuentra con esto antes?

Además, si tengo varias palabras o frases para buscar y reemplazar, ¿cómo afecta eso la velocidad/potencia de procesamiento del navegador del usuario? ¿Es un cerdo de la memoria?

Respuesta

6

Takpar, el código funciona también. Parece impedir que otras cosas funcionen, pero solo elementos que estoy tirando dinámicamente. Por ejemplo, cuando estoy usando .ajax(). No estoy seguro por qué, pero es por eso que me encontré. Voy a probar más.

En un tema relacionado, el código del Gumbo funciona:

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

La única cosa que estoy corriendo en problemas con está reemplazando el texto que se carga después de cargar la página.

Tengo algunas funciones de javascript que muestran datos del servidor, pero solo después de que la página ha cargado todos los elementos. Por ejemplo, un usuario selecciona un valor de un menú desplegable que inicia un evento para cargar una lista de productos de la base de datos.

puedo dar formato a algunos de esos productos similares:

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

sólo tendrá que encontrar un sustituir la palabra "Precio:", y posiblemente reemplazarlo con "Costo:".

Pero como he mencionado, esa información no se ha cargado todavía.

¿Es un límite con el que tengo que vivir?

+0

esto funciona bien en los navegadores modernos Pasé esto a través de JS Lint y decía que te faltaba un signo '=' igual, así que lo agregué. ¿Cómo puedo hacer esto compatible con IE8 -IE7? @coffeemonitor @jellybelly – breezy

1

Desea el selector :contains(). http://api.jquery.com/contains-selector/

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

Por supuesto, tan específico como usted puede ser es el mejor. –

+1

': contains' no es una buena idea:" El texto coincidente puede aparecer directamente dentro del elemento seleccionado, * en cualquiera de los descendientes de ese elemento, o una combinación de estos *. " – Gumbo

+0

Solo es cierto si no desea reemplazarlo en descendientes –

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

+1 Ese fue mi próximo pensamiento. ;-) – Gumbo

4

¿Por qué no simplemente usar:

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