Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Получение КОРРЕКТНОГО HTML кода в Opera/ Chrome


Автор: Frozen_Coyote 9.2.2011, 13:58
Добрый день, 

нужна помощь

ситуация следующая: пишу простой wysiwyg? столкнулся с неприятным нюансом. 

Есть у меня некий текст в iframe, я его выделяю, нажимаю кнопочку "Жирный" - текст выделенный как и положено становится жирным. Это норм. Во всех браузерах. А вот далее проблема: я нажимаю вторую кнопочку (назовем ее показ html) , к ней привязан вызов функции, который должен мне в alert показать выделенный текст вместе с html кодом (в данном случае strong или b) и что выходит на проверку: ИЕ отдает все великолепно, выделенный текст вместе с тегами, все чин чинарем. А опера и гугля хромная ведут себя неадекватно: выделяю текст - делаю жирным - не снимая выделения нажимаю кнопку показ html - отображается все тот же текст без тэгов. Но само еинтересное - если я еще раз выделю текст и зацеплю впереди стоящий символ, или последующий - тогда обрамляющие теги показываются, если я СТРОГО выделю жирный текст - то опять показывается ТОЛЬКО текст, без тегов. Помогите плиз - весь чердак себе свернул уже ((

привожу код функций:

Код

Первая функция, вызывается при нажатии на кнопку "показ HTML". Я убрал все лишнее, что может отвлечь.

function Start(iframe_id)
{
     isGecko = navigator.userAgent.toLowerCase().indexOf("gecko") != -1;
     iframe = (isGecko) ? document.getElementById(iframe_id) : frames[iframe_id];

     //ЕСЛИ БРАУЗЕР - ИЕ      if(navigator.appName == "Microsoft Internet Explorer")
       {
    sel = iframe.document.selection;
    ran = sel.createRange();
    flength = ran.text.length;
    ran.moveStart('textedit', -1);
    fend = ran.text.length;
    fstart = fend - flength;
        }

// ОБРАТИТЕ ВНИМАНИЕ - ТУТ ИДЕТ ВЫЗОВ СОБСТВЕННО ФУНКЦИИ, КОТОРАЯ И ДЕЛАЕТ ВСЮ РАБОТУ 
my_html_fragment = getMyHtmlSelection(iframe_id);

            alert(my_html_fragment)
}

// И САМА ФУНКЦИЯ

    function getMyHtmlSelection(iframe_id)
    {
        var iframe = document.getElementById(iframe_id);
        var idoc = iframe.contentDocument || iframe.contentWindow.document; // ie compatibility
        var txt = '';

        //OPERA И КОМПАНИЯ
        if(idoc.getSelection)
        {
            var sel = iframe.contentWindow.getSelection();
            var ran = sel.getRangeAt(0);
            var tempel = document.createElement('div');
            tempel.appendChild(ran.cloneContents());
            txt = tempel.innerHTML;

        }
        //IE
        if(idoc.selection)
        {
         txt = idoc.selection.createRange().htmlText;
        }

        return txt;
    }





Убедительно прошу помочь

спасибО!!!

Автор: ayax2005 10.2.2011, 12:15
Круто. Попробуйте в алерте для оперы и хрома оборачивать код тегами <pre>.
Хотя я не проверял.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)