Quiero reemplazar una cadena en particular en (el texto de) todos los elementos descendientes de un elemento dado.Reemplazar toda la aparición de una cadena en un elemento
innerHTML
no se puede utilizar, ya que esta secuencia puede aparecer en los atributos. He intentado usar XPath, pero parece que la interfaz es esencialmente de solo lectura. Como esto está limitado a un elemento, las funciones como document.getElementsByTagName
tampoco se pueden usar.
¿Podría alguien sugerir alguna forma de hacerlo? Cualquier jQuery o método DOM puro es aceptable.
Editar:
Algunas de las respuestas están sugiriendo el problema que estaba tratando de evitar: modificar el texto directamente sobre un elemento hará que todos los nodos secundarios no son de texto a ser removidos.
Por lo tanto, el problema se reduce esencialmente a cómo seleccionar eficientemente todos los nodos de texto en un árbol. En XPath, puede hacerlo fácilmente como //text()
, pero la interfaz XPath actual no le permite cambiar estos nodos de texto, parece.
Una forma de hacerlo es por recursividad como se muestra en el answer por Bergi. Otro way es usar el selector find('*')
de jQuery, pero esto es un poco más caro. Todavía estoy esperando para ver si hay mejores soluciones.
[selectores jQuery] (http://api.jquery.com/category/selectors/) le permite recorrer y modificar el dom, acceder a los descendientes y los hermanos de un elemento. Y mucho más. –
@ADC, desafortunadamente no hay nada como el selector text() de XPath .... –