Убедитесь, что объект диапазона не начинается и не заканчивается в середине слова - PullRequest
4 голосов
/ 24 августа 2009

Мое приложение требует интенсивного использования диапазонов (https://developer.mozilla.org/en/DOM/range). В частности, пользователи часто выделяют текст, а затем манипулируют им. Иногда пользователи случайно выделяют текст, который содержит фрагмент слова, и это приводит к странным результатам.

Я хотел бы иметь возможность при заданном диапазоне проверить, начинается ли он или заканчивается в середине слова, а затем, если это так, развернуть его так, чтобы он включал все слово, с которого он начинался / закончился в середине.

Ответы [ 2 ]

1 голос
/ 24 августа 2009

Как насчет этого? Вроде хак, но я протестировал его в Firefox, и он, похоже, работал. Может быть, это поможет вам начать:

function fixRange(range)
{
    var rangeString = range.toString();
    try
    {
        while (rangeString[0] != " ")
        {
            range.setStart(range.startContainer, range.startOffset - 1);
            rangeString = range.toString();
        }
        range.setStart(range.startContainer, range.startOffset + 1);
    } catch (e) {}
    try
    {
        while (rangeString[rangeString.length - 1] != " ")
        {
            range.setEnd(range.endContainer, range.endOffset + 1);
            rangeString = range.toString();
        }
        range.setEnd(range.endContainer, range.endOffset - 1);
    } catch (e) {}
    return range;
}

Пример использования (повторный выбор выбранного диапазона):

var selection = window.getSelection();
selection.addRange(fixRange(selection.getRangeAt(0)));
1 голос
/ 24 августа 2009

Я не работал с диапазонами, но похоже, что выделение должно начинаться сразу после символа пробела и заканчиваться непосредственно перед символом пробела. Вам нужно написать функцию, которая выполняет эту проверку запускаемого события onmouseup. Ответом на эту функцию должно быть автоматическое исправление выделения в том месте, где оно должно быть, в конце слова. Я бы также сделал так, чтобы он работал в начале выделения, чтобы пользователь мог щелкнуть в середине слова и правильно выделить выделение в начале слова, чтобы повысить доступность для пользователей с интерфейсами с нарушениями движения. Вы также захотите убедиться, что символы пробела определены с использованием метода test для переменной regex:

/\s+/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...