none
Javascript pasteHTML en contentEditable funciona con selección pero no en posición cursor RRS feed

  • Pregunta

  • Hola:

    Con la siguiente función inserto un texto en un div con contentEditable en una página asp.net:

    ----------------------------------------------------------------------
    function inHTML(editor, strTexto) 
     {
                var selRango;
                try
    //FF
                {
                    document.execCommand("inserthtml", false, strTexto);
                }
                catch(e)
    //IE
                {
                    try
                    {
                        editor.focus();
                        selRango =document.selection.createRange();
                        selRango.pasteHTML(strTexto);
                    }
                    catch(E)
                    {
                        alert('No se ha seleccionado ningún texto');
                    }
                }
                return false;
        }
    -----------------------------------------------------------------

    - Funciona perfectamente en IE8 y FF cuando lo que se hace es insertar sobre una selección de texto.

    - Funciona bien en FF pero no funciona en IE8 cuando lo que se hace es insertar sobre la posición del cursor sin hacer selección de texto y me arroja el alert con el error.

    Agradeceré a quien me pueda indicar qué código hay que poner para que se pueda insertar texto en IE8 cuando se intenta insertar sobre el cursor solo sin selección de texto. Posiblemente hay que buscar la posición del cursor y ahí insertar el texto, pero no estoy seguro y posiblemente se puede solucionar variando algo en el código anterior.

    Saludos al grupo.

    miércoles, 11 de enero de 2012 20:53

Respuestas

  • SOLUCIONADO

    Hola:

    Buscando en la red, gracias a este enlace he conseguido dar con la solución.
    http://www.forosdelweb.com/f13/no-funciona-createrange-ie8-725378/
    Parece que solo ocurre con IE8 y de lo que se trata es de poner el foco en el div editable antes de hacer la selección.

    Hay que hacer una referencia en la función directamente al elemento div mediante getElementById. Basta cambiar la línea:
        editor.focus();
    por esta otra:
        document.getElementById(editor).focus();
    donde editor es el id del div con contentEditable y es el primer parámetro de la función pasado como cadena de texto.

    Saludos al grupo.
    jueves, 12 de enero de 2012 16:42