2010-12-15 22 views
5

Estoy tratando de encontrar una solución para buscar una cadena de texto "Tony" contenida en el DOM y reemplazarla por una cadena de texto "Tigre".Cómo encontrar texto y reemplazarlo usando jQuery

¿Alguien tiene alguna idea o idea de cómo hacerlo? ¿Supongo que tomará una declaración junto con una función de reemplazo y posiblemente contenga?

Gracias Jake

+2

Más detalles, por favor. ¿Tiene alguna idea de _dónde_ en el DOM podría ser? ¿Desea reemplazar _every_ occurrence of 'Tony' con' Tiger' sin importar dónde ocurra? –

+0

¿tienes el contenedor html para eso? o es directo reemplazar todo – kobe

+0

Sí, quiero reemplazar cada aparición de "Tony" con "Tigre", donde sea que esté en el DOM, probablemente dentro del elemento .container. – jrutter

Respuesta

18

Usted puede usar esto para buscar todos los niños del elemento de cuerpo y reemplazar el texto ...

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

Se utiliza jQuery. También sólo debe alterar el contenido textual de los elementos y ninguno de los formato HTML ...

También puede utilizar este método que utiliza una expresión regular y recibirá todos los elementos anidados:

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

Esto no funcionará porque 'children()' no busca de forma recursiva a través del DOM - solo le proporciona los hijos inmediatos. –

+0

No funciona en mi página: http://www.laithwaiteswine.com $ ('. Container'). Children(). Each (function() {$ (this) .text ($ (this) .text() .replace ('Laithwaites', 'Tiger'))}); - Está eliminando todo el DOM o lo está rompiendo. – jrutter

+1

@jrutter: No estoy seguro de por qué le está sucediendo eso sin ver su código. Sin embargo, he optado por mi solución con una alternativa utilizando un enfoque RegExp ---> $ ('cuerpo'). Html ($ ('cuerpo'). Html(). Replace (/ Tony/gi, 'tiger')); – exoboy

5

página ancha, se puede usar algo como esto:

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

O, si usted tiene un recipiente más específica, el uso de jQuery para seleccionar dicho contenedor secundario y hacer la misma cosa .

De cualquier manera, es una especie de enfoque de disparo. Cambiará la cadena tanto en el texto visible como en los atributos del elemento html. Podría ser necesario un enfoque más detallado si la cadena necesita ser ignorada en ciertas ubicaciones.

+0

Esto no funciona, la página se vuelve a cargar. – jrutter

3

¿Es posible para unir esto con una solución del lado del servidor? Puede envolver cada aparición del lado del servidor de la palabra con una clase especial, como <span class="replaceme">texttoreplace</span>.

Ejecutar un reemplazo de javascript en las clases resultantes solo debería acelerar las cosas.

+1

+1 definitivamente mucho mejor que buscar DOM en el texto. –

+1

Si esto fuera una posibilidad, ¿por qué no iba a reemplazar la cadena en el lado del servidor para empezar? Agregar elementos dom innecesarios parece excesivo – ximi

Cuestiones relacionadas