在Webkit中,如何在范围中添加另一个单词?

时间:2011-01-17 00:32:09

标签: javascript webkit range textrange

假设我使用range.expand('word')创建了我的范围,以便它覆盖一个单词。通常要添加下一个单词,我会写range.moveEnd('word', 1)。但这似乎不适用于Webkit。也许它应该以不同的方式实施?

1 个答案:

答案 0 :(得分:3)

你在谈论TextRange,它们只在IE中完全实现。其他浏览器使用DOM Level 2 Range对象,虽然在很多方面远远优于TextRanges,但却没有基于文本的方法,例如expand()。但是,最近的WebKit浏览器确实实现了expand()的版本,并且Webkit和Firefox 4都具有Selection对象的modify()方法,该方法提供了类似的功能。

示例: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>