Foros del Web » Programando para Internet » Javascript »

Problema con pasteHTML

Estas en el tema de Problema con pasteHTML en el foro de Javascript en Foros del Web. Hola amigos, estoy implementando para explorer la funcionalidad "Resaltar todo" del firefox. Hasta ahora todo va bien puesto que me resalta las palabras en amarillo ...
  #1 (permalink)  
Antiguo 18/11/2008, 05:38
 
Fecha de Ingreso: febrero-2008
Mensajes: 17
Antigüedad: 16 años, 2 meses
Puntos: 1
Problema con pasteHTML

Hola amigos,

estoy implementando para explorer la funcionalidad "Resaltar todo" del firefox. Hasta ahora todo va bien puesto que me resalta las palabras en amarillo como en Firefox. El problema que tengo es que no se como volverlo al estado normal puesto que pasteHTML no machaca el codigo HTML.

El codigo que me colorea en amarillo es el siguiente:

function resaltar(str)
{
var txt, i, found;

if (str == "")
return false;

// SI EL NAVEGADOR ES EXPLORER
if (document.all)
{

// Nos creamos un rango de texto y seleccionamos la capa sobre la que actuaremos.
txt = window.document.body.createTextRange();
txt.moveToElementText(cCn);

for (var i = 0; txt.findText(str); i++)
{

txt.pasteHTML('<span style="padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;">' + txt.text + '<\/span>');

txt.collapse(false);
}

}
return false;

}

Alguien sabe como puedo hacerlo????????

Con una expresion regular se hace bastante facil pero los documentos pesan 3 megas y me dejan el navegador colgado.
  #2 (permalink)  
Antiguo 18/11/2008, 16:20
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 2 meses
Puntos: 62
Respuesta: Problema con pasteHTML

no será innerHTML?
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #3 (permalink)  
Antiguo 18/11/2008, 16:54
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Problema con pasteHTML

Cita:
Iniciado por ZiTAL Ver Mensaje
no será innerHTML?
Hola:

Aparte, innerHTML es un atributo/propiedad y no una función, así que no lleva llaves.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 19/11/2008, 02:11
 
Fecha de Ingreso: febrero-2008
Mensajes: 17
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Problema con pasteHTML

El innerHTML es mucho mas lento que que un rango de texto. Hasta hoy está con innerHTML pero en documentos pesados (3megas) se cuelga el navegador. El problema es que si quieres usar innerHTML tienes que hacer uso de una expresion regular para sustituir HOLA por <span> HOLA </span> y la expresion regular deja tostado el explorer.

PD: La expresion regular es necesaria pq si el usuario quiere resaltar todas las "a" hay que asegurarse que el replace no sustiye las "a" que forman parte de los tag HTML, es decir, <a href="...">
  #5 (permalink)  
Antiguo 19/11/2008, 08:25
 
Fecha de Ingreso: febrero-2008
Mensajes: 17
Antigüedad: 16 años, 2 meses
Puntos: 1
De acuerdo Respuesta: Problema con pasteHTML

Solucionado.

Ya tengo el codigo que me quita el resaltado de las palabras de un modo mucho mas rapido que el innerHTML. Os dejo el codigo por si le interesa a alguien.


function quitarResaltado(str)
{
var txt, i, found;

if (str == "")
return false;

// SI EL NAVEGADOR ES EXPLORER
if (document.all)
{
// creamos el rango de texto y nos posicionamos en la capa deseada.
txt = window.document.body.createTextRange();
txt.moveToElementText(soyid);

// buscamos todas las apareciones de la palabra str
// accedemos a su nodo padre y lo borramos.
for (var i = 0; txt.findText(str); i++)
{
var elemento =txt.parentElement();
elemento.removeNode(false)
txt.collapse(false);
}
}
return false;
}
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 23:19.