Me gustaría actualizar el texto del elemento de forma dinámica:
<div>
**text to change**
<someChild>
text that should not change
</someChild>
<someChild>
text that should not change
</someChild>
</div>
Soy nuevo en jQuery, por lo que esta tarea parece ser bastante desafiante para mí. ¿Alguien podría indicarme una función / selector para usar?
Si es posible, me gustaría hacerlo sin agregar un nuevo contenedor para el texto que necesito cambiar.
javascript
jquery
ika
fuente
fuente
Respuestas:
Mark tiene una mejor solución usando jQuery , pero es posible que también pueda hacer esto en JavaScript normal.
En Javascript, la
childNodes
propiedad le brinda todos los nodos secundarios de un elemento, incluidos los nodos de texto.Entonces, si supiera que el texto que desea cambiar siempre será lo primero en el elemento, entonces, dado, por ejemplo, este HTML:
Podrías hacer esto:
Por supuesto, aún puede usar jQuery para seleccionar
<div>
en primer lugar (es decirvar your_div = $('your_div').get(0);
).fuente
data
o la existentenodeValue
.$('#yourDivId')[0].childNodes[0].nodeValue = 'New Text';
Actualización 2018
Como esta es una respuesta bastante popular, decidí actualizarla y embellecerla un poco agregando el selector de nodo de texto a jQuery como complemento.
En el fragmento a continuación, puede ver que defino una nueva función jQuery que obtiene todos (y solo) los textNodes. También puede encadenar esta función con, por ejemplo, la
first()
función. Hago un recorte en el nodo de texto y verifico si no está vacío después del recorte porque los espacios, pestañas, nuevas líneas, etc. también se reconocen como nodos de texto. Si también necesita esos nodos, simplemente elimínelos de la declaración if en la función jQuery.Agregué un ejemplo de cómo reemplazar el primer nodo de texto y cómo reemplazar todos los nodos de texto.
Este enfoque facilita la lectura del código y facilita su uso varias veces y con diferentes propósitos.
La Actualización 2017 (adrach) también debería funcionar si lo prefiere.
Como extensión jQuery
Mostrar fragmento de código
Equivalente de Javascript (ES)
Mostrar fragmento de código
Actualización 2017 (adrach):
Parece que varias cosas han cambiado desde que se publicó. Aquí hay una versión actualizada
Respuesta original (no funciona para versiones actuales)
Fuente: http://api.jquery.com/contents/
fuente
.filter(':first')
, pero usarlo.first()
funcionó para mí. ¡Gracias!.text()
(ver este jsfiddle ) pero sí con.replaceWith()
( jsfiddle aquí ).nodeType=3
esto es el tipo de nodo de filtro medio de "TEXTO", w3schools.com/jsref/prop_node_nodetype.asp para obtener más informaciónVer en acción
Margen :
fuente
Esto cambia solo el primer nodo de texto
fuente
Simplemente envuelva el texto que desea cambiar en un intervalo con una clase para seleccionar.
No necesariamente responde a su pregunta, lo sé, pero probablemente sea una mejor práctica de codificación. Mantenga las cosas limpias y simples
¡Voilà!
fuente
Para el caso específico que mencionaste:
... esto es muy facil:
No dice cómo quiere generalizar esto. Si, digamos, desea cambiar el texto del primer nodo de texto dentro del
<div>
, podría hacer algo como esto:fuente
fuente
Aquí es todavía otro método: http://jsfiddle.net/qYUBp/7/
HTML
JQUERY
fuente
Aquí hay muchas respuestas excelentes, pero solo manejan un nodo de texto con niños. En mi caso, necesitaba operar en todos los nodos de texto e ignorar los niños html PERO PRESERVAR EL ORDEN.
Entonces, si tenemos un caso como este:
Podemos utilizar el siguiente código para modificar solo el texto Y CONSERVAR EL PEDIDO
Aquí está el jsfiddle de que funciona
fuente
Creo que estás buscando .prependTo ().
http://api.jquery.com/prependTo/
fuente
Respuesta simple:
fuente
El problema con la respuesta de Mark es que también obtienes nodos de texto vacíos. Solución como complemento jQuery:
fuente
Esta es una pregunta antigua, pero puede hacer una función simple como esta para hacer su vida más fácil:
Ejemplo:
Uso:
fuente
Vesrsion 2019 - Corto y simple
Explicación
document.querySelector('#your-div-id')
se utiliza para seleccionar el padre (el elemento cuyo texto está a punto de cambiar).childNodes[0]
selecciona el nodo de texto.nodeValue = 'new text'
establece el valor del nodo de texto en "texto nuevo"Esta respuesta posiblemente esté inspirada en el comentario de Dean Martin. No puedo decirlo con certeza ya que he estado usando esta solución durante años. Pensé que debería publicar esta probabilidad aquí porque a algunas personas les importa más que el hecho de que esta es la mejor solución.
fuente