Foros del Web » Programando para Internet » Javascript »

Conseguir el texto de un div

Estas en el tema de Conseguir el texto de un div en el foro de Javascript en Foros del Web. Hola Quiero sacar el valor de un div. En eso no hay problema. El problema viene cuando en el texto del div hay algún tag ...
  #1 (permalink)  
Antiguo 10/09/2009, 06:10
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años
Puntos: 126
Conseguir el texto de un div

Hola

Quiero sacar el valor de un div. En eso no hay problema. El problema viene cuando en el texto del div hay algún tag html. En tal caso, solo logro sacar el texto que está delante del primer tag

Código javascript:
Ver original
  1. <div id="texto">Esto <b>es</b> una prueba para resaltar caracteres o palabras de este texto</div>
  2. <input type="button" value="Mostrar" onclick="alert(document.getElementById('texto').firstChild.nodeValue);" />

¿Como puedo sacar el valor del div, haya o no haya tags html?

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #2 (permalink)  
Antiguo 10/09/2009, 06:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: Conseguir el texto de un div

Código HTML:
<div id="texto">Esto <b>es</b> una prueba para resaltar caracteres o palabras de este texto</div>
<input type="button" value="Mostrar" onclick="alert(document.getElementById('texto').innerHTML);" /> 
No estoy seguro de que sea lo que quieres... puesto que se ven los tags...

Para hacerlo con el DOM como lo hacias tu se puede complicar mucho la cosa ya que dentro de un div potencialmente podria haber infinidad de tags y para mas inri anidados... con lo que tendrias que hacer algun tipo de bucle en entre dentro de los childs del div y dentro de los childs de los childs (nietos del div)... no se si me explico...

Quim

Última edición por quimfv; 10/09/2009 a las 07:03
  #3 (permalink)  
Antiguo 10/09/2009, 07:37
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años
Puntos: 126
Respuesta: Conseguir el texto de un div

Gracias, quimfv por responder. Realmente lo que quiero es sacar el valor del div, con los tags incluidos, para luego reemplazarlos. Se que suena raro. Lo que me ocupa es resaltar los caracteres o palabras que coincidan con lo insertado en un text
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #4 (permalink)  
Antiguo 10/09/2009, 12:57
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años
Puntos: 126
Respuesta: Conseguir el texto de un div

Hola

Ya lo he resulto. Aún falta algunos detalles, pero básicamente el script sería este

Código javascript:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html xmlns="http://www.w3.org/1999/xhtml"lang="es" xml:lang="es">
  3. <head>
  4. <meta name="http-equiv" content="Content-type: text/html; charset=UTF-8"/>
  5. <script type="text/javascript">
  6. var vuelta = 0;
  7. var cadena = ""
  8. function Resaltar(c,ev) {
  9. var keyCode = document.layers ? ev.which : document.all ? event.keyCode : document.getElementById ? ev.keyCode : 0;
  10.     if (keyCode == 8) vuelta--;
  11.  
  12.         if (vuelta < 1) {
  13.                 cadena = document.getElementById("texto").firstChild.nodeValue;
  14.         }
  15.  
  16. var rg = new RegExp(c,"g");
  17.         if (rg.exec(cadena) != null) {
  18.             var marca = cadena.replace(rg, "<span style=\"background-color:#9ACD32;color:#FFFFFF;\">" + c + "</span>");
  19.                 document.getElementById("texto").innerHTML = marca;
  20.         document.getElementById("terminos").style.border = "";
  21.         } else {
  22.         document.getElementById("texto").innerHTML = cadena;
  23.         document.getElementById("terminos").style.border = "solid #FF0000 1px";
  24. }
  25. vuelta++;
  26. }
  27. </script>
  28. </head>
  29. <body>
  30. <div id="texto">Esto es una prueba para resaltar caracteres o palabras de este texto prueba</div>
  31. <form method="" action="" name="" autocomplete="off">
  32. <input type="text" value="" id="terminos" onkeyup="Resaltar(this.value,event);" />
  33. </form>
  34. </body>
  35. </html>
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />

Última edición por Adler; 10/09/2009 a las 15:08 Razón: intentar que se asemeje a la ayuda de firefox
  #5 (permalink)  
Antiguo 11/09/2009, 14:47
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años
Puntos: 126
Respuesta: Conseguir el texto de un div

Hola

Cuando le he dado el script a un colega y la ha usado se ha dado cuenta de un problema que se produce ante una acción. El problema se produce cuando se inserta un solo carácter, hay coincidencia, y por alguna razón, eliminamos es carácter y dejamos el campo vacío, entonces el valor de la variable cadena pasa a ser (Esto es una), arreglo al script anterior y asumiendo que el carácter que insertamos y luego eliminamos sea p

No logro ver cual puede ser el problema

Gracias
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #6 (permalink)  
Antiguo 12/09/2009, 14:52
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años
Puntos: 126
Respuesta: Conseguir el texto de un div

Hola

Se me olvidaba que ya lo solucione. No edito el post anterior para que quede mas claro. Son unos cuantos cambios

Código javascript:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html xmlns="http://www.w3.org/1999/xhtml"lang="es" xml:lang="es">
  3. <head>
  4. <meta name="http-equiv" content="Content-type: text/html; charset=UTF-8"/>
  5. <script type="text/javascript">
  6. var vuelta = 0;
  7. var cadena = ""
  8. var len = 0;
  9. function Resaltar(c,ev) {
  10. var largo_cadena = len;
  11. var keyCode = document.layers ? ev.which : document.all ? event.keyCode : document.getElementById ? ev.keyCode : 0;
  12.    
  13.     if (keyCode == 8) vuelta--;
  14.         if (vuelta < 1) {
  15.                 cadena += document.getElementById("texto").firstChild.nodeValue;
  16.      }
  17.  
  18. var largo2_cadena = cadena.length
  19.  
  20.     if (largo2_cadena >= largo_cadena) {len = largo_cadena;}
  21.     if (largo_cadena == 0) {len = largo2_cadena;}
  22.  
  23. var rg = new RegExp(c,"g");
  24.  
  25.         if (rg.exec(cadena.substr(0,parseInt(len))) != null) {
  26.             var marca = cadena.substr(0,parseInt(len)).replace(rg, "<span style=\"background-color:#9ACD32;color:#FFFFFF;\">" + c + "</span>");
  27.                 document.getElementById("texto").innerHTML = marca;
  28.         document.getElementById("terminos").style.border = "";
  29.         } else {
  30.         document.getElementById("texto").innerHTML = cadena;
  31.         document.getElementById("terminos").style.border = "solid #FF0000 1px";
  32. }
  33. vuelta++;
  34. }
  35. </script>
  36. </head>
  37. <body>
  38. <div id="texto">Esto es una prueba para resaltar caracteres o palabras de este texto prueba</div>
  39. <form method="" action="" name="" autocomplete="off">
  40. <input type="text" value="" id="terminos" onkeyup="Resaltar(this.value,event);" />
  41. </form>
  42. </body>
  43. </html>
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:51.