JavaScript: как адаптировать рабочую функцию (IE) для Firefox и / или Chrome

Я использую следующую функцию, чтобы получить выделенный диапазон текста в contenteditable div. Это прекрасно работает в IE, но не в Firefox и Chrome.

Может кто-нибудь сказать мне, как мне нужно настроить это так, чтобы он работал либо в FF и Chrome, или хотя бы в одном из них (кроме IE)? Это бы работало в текущих версиях, чего было бы достаточно. Идея состоит в том, чтобы заменить выделенный текст другой функцией, которая получает здесь "selTxt".

Функция для получения выбора (работает в IE):

function GetSelection() 
{
selTxt = '';

if (typeof window.getSelection != "undefined") 
{
    var sel = window.getSelection();
    if (sel.rangeCount) 
    {
        var container = document.createElement('div');
        for (var i = 0, len = sel.rangeCount; i < len; ++i) 
        {
            container.appendChild(sel.getRangeAt(i).cloneContents());
        }
        selTxt = container.innerHTML;
    }
} 
else if (typeof document.selection != 'undefined') 
{
    if (document.selection.type == 'Text') 
    {
        selTxt = document.selection.createRange().htmlText;
    }
}
return selTxt;
}

Функция, чтобы заменить выбор (это, кажется, проблема):

function EditBold()
{
    var newTxt = '';
    btnID = 'btnBold';

    GetSelection();     

    if (selTxt.toLowerCase().indexOf('<strong>') == -1)
    {
        document.selection.createRange().pasteHTML("<strong>" + selTxt + "</strong>");
    }
}

Большое спасибо за любую помощь в этом, Тим.

1 ответ

Решение

Вы используете переменную selTxt в EditBold() функция, но не объявлять ее внутри функции. Если предполагается, что значением является то, что возвращается GetSelection(), используйте следующее:

var selTxt = GetSelection();
Другие вопросы по тегам