Foros del Web » Programando para Internet » Javascript »

Buscar palabra en div que no pertenezca a una etiqueta

Estas en el tema de Buscar palabra en div que no pertenezca a una etiqueta en el foro de Javascript en Foros del Web. Hola gente, quisiera seleccionar todo el codigo de un div que no pertenezca a un hijo span de este y ademas, poder reemplazar palabras. Si ...
  #1 (permalink)  
Antiguo 11/02/2014, 11:51
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Buscar palabra en div que no pertenezca a una etiqueta

Hola gente, quisiera seleccionar todo el codigo de un div que no pertenezca a un hijo span de este y ademas, poder reemplazar palabras.

Si tengo este html:

Código HTML:
Ver original
  1. <div id="textoid">
  2. Hola, este texto es una prueba, <span class="clase1"> la prueba consiste </span> en reemplazar en <span class="clase2"> este texto </span>
  3. </div>

Quisiera obtener el texto que no esta en los span, seria este:

Cita:
Hola, este texto es una prueba, en reemplazar en
Luego, quisiera reemplazar una palabra, por ejemplo "texto" por "<span class="clase3"> texto </span>"

Quedando asi:

Cita:
Hola, este<span class="clase3"> texto </span>es una prueba, en reemplazar en
y finalmente rearmar el html original quedando asi:

Código HTML:
Ver original
  1. <div id="textoid">
  2. Hola, este<span class="clase3"> texto </span>es una prueba, <span class="clase1"> la prueba consiste </span> en reemplazar en <span class="clase2"> este texto </span>
  3. </div>

En si el orden de los pasos no importa, es como se me ocurrio plantear el problema nada mas.

Lo que importa es meter la palabra "texto" en un span de una clase solo si no esta ya dentro de un span.

¿es posible? ¿como? Notese que no se reemplazo la palabr texto que esta en el span de la clase2, solo la aparicion que esta en suelta dentro del div textoid
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #2 (permalink)  
Antiguo 13/02/2014, 06:15
 
Fecha de Ingreso: agosto-2013
Mensajes: 150
Antigüedad: 10 años, 8 meses
Puntos: 29
Respuesta: Buscar palabra en div que no pertenezca a una etiqueta

Han pasado un par de días desde la pregunta, pero si aún te interesa y no lo haz resuelto, se puede intentar.
  #3 (permalink)  
Antiguo 13/02/2014, 10:06
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Buscar palabra en div que no pertenezca a una etiqueta

Hola, no aun no lo resolvi, habia empezado unos borradores usando el DOM, me paraba en el div, luego recorria los hijos que son textnode (no los span) y buscaba la palabra a reemplazar dentro de estos. estoy medio trabado en esa parte, como convertir un nodo de texto en 3 nodos (el texto antes de la palabra, el span con la palabra, y el texto despues de la pabra) y que quede en el mismo lugar, si puedes ayudarme te lo agradezco porque aun no lo resolvi
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #4 (permalink)  
Antiguo 13/02/2014, 10:25
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Buscar palabra en div que no pertenezca a una etiqueta

Hola @NSD el tema es un poco complicado, pero a partir de esta idea sale el siguiente código:

Código Javascript:
Ver original
  1. var matchText = function(node, regex, callback) {
  2.     var child = node.firstChild;
  3.     do {
  4.         if (child.nodeType === 3) {
  5.             child.data.replace(regex, function(all) {
  6.                 var args = [].slice.call(arguments),
  7.                     offset = args[args.length - 2];
  8.                 if(offset > child.data.length){
  9.                     offset = child.data.indexOf(all);
  10.                 }
  11.                 var newTextNode = child.splitText(offset);
  12.                 newTextNode.data = newTextNode.data.substr(all.length);
  13.                 callback.apply(window, [child].concat(args));
  14.                 child = newTextNode;
  15.             });
  16.         }
  17.     } while (child = child.nextSibling);
  18.  
  19.     return node;
  20. }
  21. var searchTerm = 'texto';
  22. matchText(document.getElementById("textoid"), new RegExp("\\b" + searchTerm + "\\b", "g"), function(node, match, offset) {
  23.     var span = document.createElement("span");
  24.     span.textContent = match;
  25.     node.parentNode.insertBefore(span, node.nextSibling);
  26. });

DEMO

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.

Última edición por jonni09lo; 13/02/2014 a las 10:30
  #5 (permalink)  
Antiguo 13/02/2014, 13:12
 
Fecha de Ingreso: agosto-2013
Mensajes: 150
Antigüedad: 10 años, 8 meses
Puntos: 29
Respuesta: Buscar palabra en div que no pertenezca a una etiqueta

Atendiendo a la finalidad tenía esta idea:
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.    <head>
  3.       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4.       <title></title>
  5.       <style type="text/css">
  6.          .clase1{color: red;}
  7.          .clase2{color: blue;}
  8.          .clase3{color: lime;}
  9.       </style>
  10.       <script type="text/javascript">
  11.          window.onload = function() {
  12.             var eDiv = document.getElementById('textoid');
  13.             var texto = '';
  14.             var clase = '';
  15.             for (var i = 0; i < eDiv.childNodes.length; i++) {
  16.               // span
  17.               if (eDiv.childNodes[i].nodeName === 'SPAN') {
  18.                  clase = eDiv.childNodes[i].className;
  19.                  cadena = eDiv.childNodes[i].innerHTML;
  20.                  texto += '<span class=' + clase + '>' + cadena + '</span>';
  21.                }
  22.                // Lo que no sea span
  23.                if (eDiv.childNodes[i].nodeName !== 'SPAN') {
  24.                   cadena = eDiv.childNodes[i].nodeValue;
  25.                   texto += cadena.replace(/texto/, '<span class="clase3">texto</span>');
  26.                }
  27.             }
  28.             document.getElementById("rst").innerHTML = texto;
  29.          }
  30.       </script>
  31.    </head>
  32.    <body>
  33.       <div id="textoid">
  34.          Hola, este texto es una prueba, <span class="clase1"> la prueba consiste </span>
  35.          en reemplazar <span class="clase2">este texto.</span> Por otro texto.
  36.       </div>
  37.       <div id="rst"></div>
  38.    </body>
  39. </html>
  #6 (permalink)  
Antiguo 13/02/2014, 13:16
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Buscar palabra en div que no pertenezca a una etiqueta

Hola, interesante código, lo único "malo" que tiene es que si tienes:

Código HTML:
Ver original
  1. <div id="textoid">
  2.     Hola, este texto es una prueba de otro texto, <span class="clase1"> la prueba consiste </span> en reemplazar <span class="clase2">este texto.</span> Por otro texto.
  3. </div>
  4. <div id="rst"></div>

No funcionará

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #7 (permalink)  
Antiguo 13/02/2014, 14:10
 
Fecha de Ingreso: agosto-2013
Mensajes: 150
Antigüedad: 10 años, 8 meses
Puntos: 29
Respuesta: Buscar palabra en div que no pertenezca a una etiqueta

Me olvidé la g: /texto/g
  #8 (permalink)  
Antiguo 13/02/2014, 15:44
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Buscar palabra en div que no pertenezca a una etiqueta

Wow muchas gracias, hacen que parezca facil :) voy a ponerme a estudiar sus codigos cualquier duda los consulto
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: etiqueta, html, palabra
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 16:46.