2010-02-27 9 views
15

Recibí una ayuda increíble de otros para encontrar y reemplazar texto con jquery.jQuery - Buscar y reemplazar texto, después de que se cargó el cuerpo

El código de abajo se encuentra la palabra: "Asunto:" y sustituirla por "Nombre:"

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

Y esto funciona de maravilla.

Lo único con lo que estoy teniendo problemas es reemplazar 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 Manzanas Precio: x.xx por libra hechos nutricionales ....

Sólo voy a querer encontrar un sustituir la palabra " Precio: ", y posiblemente reemplazarlo por" Costo: ".

Pero como he mencionado, esa información no se ha cargado todavía. Y solo aparece después de que el usuario selecciona "Manzanas Granny Smith" en el menú desplegable.

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

Respuesta

13

Usted podría intentar adjuntar un evento para el ajaxStop event, así como de la carga:

function replaceText() { 
    var jthis = $(this); 
    $("*").each(function() { 
     if(jthis.children().length==0) { 
      jthis.text(jthis.text().replace('Subject:', 'Name:')); 
     } 
    }); 
} 
$(document).ready(replaceText); 
$("html").ajaxStop(replaceText); 
+0

¡Eso funciona! Buena idea, y sin embargo tan simple. ¡Gracias! – coffeemonitor

+2

¿Por qué crear tantos objetos jq ...? Caché $ (esto) refs en su lugar – redsquare

+0

¿Dónde agrego este fragmento? functions.php, mi archivo de tema? Perdón por la pregunta noobie. – Pete

1

Llame a su función desde el $(document).ready() devolución de llamada como esto

$(document).ready(function() { replace_stuff(); }); 
+0

Ya lo estoy haciendo, y todavía no afecta los datos cargados después de que la página se haya cargado. – coffeemonitor

0

Ésta función funciona perfectamente para mí:

function replaceText(selector, text, newText, flags) { 
    var matcher = new RegExp(text, flags); 
    $(selector).each(function() { 
    var $this = $(this); 
    if (!$this.children().length) 
     $this.text($this.text().replace(matcher, newText)); 
    }); 
} 

Aquí hay un ejemplo de uso:

function replaceAllText() { 
    replaceText('*', 'Subject:', 'Name:', 'igm'); 
} 

$(document).ready(replaceAllText); 
$('html').ajaxStop(replaceAllText); 
Cuestiones relacionadas