В Webkit, как добавить еще одно слово в диапазон? - PullRequest
2 голосов
/ 17 января 2011

Предположим, я сделал свой диапазон таким, чтобы он охватывал слово, используя range.expand('word'). Обычно, чтобы добавить следующее слово, я бы написал range.moveEnd('word', 1). Но это, похоже, не работает в Webkit. Возможно, это должно быть реализовано по-другому?

1 Ответ

3 голосов
/ 17 января 2011

Вы говорите о TextRange s, которые полностью реализованы только в IE. В других браузерах вместо этого используются объекты DOM Level 2 Range , которые в большинстве случаев значительно превосходят TextRanges и не имеют эквивалента текстовых методов, таких как expand(). Однако в последних браузерах WebKit реализована версия expand(), а в Webkit и Firefox 4 есть метод modify() объекта Selection, который обеспечивает аналогичную функциональность.

Пример: http://jsfiddle.net/bzU22/1/

<script type="text/javascript">
    function expandSelection() {
        if (window.getSelection && window.getSelection().modify) {
            var sel = window.getSelection();
            sel.modify("extend", "forward", "word");
        } else if (document.selection && document.selection.type == "Text") {
            var range = document.selection.createRange();
            range.moveEnd("word", 1);
            range.select();
        }
        document.getElementById("test").focus();
    }
</script>

<input type="button" unselectable onclick="expandSelection();" value="Expand">
<p contenteditable="true" id="test">Hello, this is some test text.
    Select a word and then press the 'Expand' button.</p>
...