Предположим, я сделал свой диапазон так, чтобы он покрывал слово, используя range.expand('word')
. Обычно, чтобы добавить следующее слово, я писал range.moveEnd('word', 1)
. Но это, кажется, не работает в Webkit. Может быть, это должно быть реализовано по-другому?
Как в Webkit добавить еще одно слово в диапазон?
Ответы (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
Спасибо, Тим. Раньше я использовал var range = document.caretRangeFromPoint(x,y). Есть ли эквивалент, чтобы я мог использовать sel.modify?
- person tofutim; 17.01.2011
Браузеры имеют различные API для этого. Этот вопрос содержит дополнительную информацию: stackoverflow.com/questions/3189812/
- person Tim Down; 17.01.2011