Как в Webkit добавить еще одно слово в диапазон?

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


person tofutim    schedule 17.01.2011    source источник


Ответы (1)


Вы говорите о TextRange, которые полностью реализованы только в IE. Другие браузеры используют объекты DOM Level 2 Range. вместо этого, которые, хотя и значительно превосходят TextRanges, во многих отношениях не имеют эквивалента текстовых методов, таких как expand(). Однако последние браузеры WebKit реализуют версию expand(), и как Webkit, так и Firefox 4 имеют modify()< /a> метод объекта 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>
person Tim Down    schedule 17.01.2011
comment
Спасибо, Тим. Раньше я использовал var range = document.caretRangeFromPoint(x,y). Есть ли эквивалент, чтобы я мог использовать sel.modify? - person tofutim; 17.01.2011
comment
Браузеры имеют различные API для этого. Этот вопрос содержит дополнительную информацию: stackoverflow.com/questions/3189812/ - person Tim Down; 17.01.2011