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

0

Я использую следующую функцию, чтобы получить выделенный диапазон текста в контентном 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
    Что вы видите при запуске этого кода в FF и Chrome? window.getSelection() поддерживается как FF, так и Chrome.
  • 0
    Спасибо за ответ. При тестировании в FF и Chrome, похоже, он ничего не делает, но и не выдает ошибку.
Показать ещё 1 комментарий
Теги:
google-chrome
firefox

1 ответ

1
Лучший ответ

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

var selTxt = GetSelection();
  • 1
    Хотя использование var должно быть сделано, я думаю, что ссылка на selTxt будет работать, потому что selTxt = ''; из GetSelection() собирается установить в window глобальную переменную, которая будет доступна в EditBold() . Использование такой глобальной переменной, конечно, плохая практика.
  • 0
    Спасибо за заметки по этому поводу. Это объявляется как глобальная переменная вне этих функций, поэтому я не вставил ее сюда.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню