Я использую следующую функцию, чтобы получить выделенный диапазон текста в контентном 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>");
}
}
Большое спасибо за любую помощь в этом, Тим.
Вы используете переменную selTxt
в функции EditBold()
, но не EditBold()
ее внутри функции. Если предполагается, что значение будет возвращено GetSelection(), используйте следующее:
var selTxt = GetSelection();
var
должно быть сделано, я думаю, что ссылка на selTxt
будет работать, потому что selTxt = '';
из GetSelection()
собирается установить в window
глобальную переменную, которая будет доступна в EditBold()
. Использование такой глобальной переменной, конечно, плохая практика.
window.getSelection()
поддерживается как FF, так и Chrome.