Выделение текстовой проблемы - PullRequest
1 голос
/ 22 февраля 2011

Я исправляю редактор и у меня проблема с выделением текста.

Я получил этот код для проверки того, что выделил пользователь (более подробная информация под кодом):

function getSelectionHTML()
{
    var iframe = document.getElementById(theEditorID);
    var win, doc = iframe.contentDocument;
    if(doc)
        win = doc.defaultView;
    else
    {
        win = iframe.contentWindow;
        doc = win.document;
    }
    var userSelection;

    if(win.getSelection)
    {
        userSelection = win.getSelection();
        if(userSelection.getRangeAt)
            var range = userSelection.getRangeAt(0);
        else
        {
            var range = document.createRange();
            range.setStart(userSelection.anchorNode, userSelection.anchorOffset);
            range.setEnd(userSelection.focusNode, userSelection.focusOffset);
        }
        var clonedSelection = range.cloneContents();
        var div = document.createElement('div');
        div.appendChild(clonedSelection);
        callIcons(div.innerHTML);
    }
    else if(doc.selection)
    {
        userSelection = document.selection.createRange();
        callIcons(userSelection.htmlText);
    }
};

Когда пользователь выделяет жирный текст и другой курсив, я получаю такой вывод:

<b>some text</b><i>some other text</i>

Но когда пользователь выделяет только жирный текст, я получаю этот вывод (тега 'жирный' нет):

some text

Вы можете проверить это, жить, здесь - http://brownfolder.com/06/ Вы увидите предупреждение после выделения текста.

У вас есть идеи, как я могу это исправить?

Заранее спасибо.

1 Ответ

2 голосов
/ 22 февраля 2011

Браузеры зависят от того, включают ли они окружающие теги в выбор. Обычно они не включают окружающие теги, если выделение полностью содержится внутри тегов. Можно пройти DOM с начала выбора и проверить, является ли каждый элемент тегом . Но если iframe, с которым вы работаете, использует contenteditable, нет гарантии, что он будет выделен жирным шрифтом с тегами . Существуют и другие способы выделения текста жирным шрифтом: IE обычно добавляет теги к жирному шрифту, а Firefox и WebKit могут использовать .

Вероятно, лучше использовать queryCommandState ('полужирный') вместо документа iframe.

...