Как выбрать несколько слов в window.getSelection - PullRequest
0 голосов
/ 25 сентября 2011

Как выбрать несколько слов в window.getSelection.

В этом коде, если я выберу tweenen paragrap, будет заблокировано слово paragraphs и пропущено `между ними.И мне нужно выбрать оба 2 слова.

Или даже если я выберу 3 слова dd 2 spa, он выберет 3 слова add 2 spaces.спасибо.

<script type="text/javascript">
    function Selected() {
        var sel;
        if ((window.getSelection) && (sel = window.getSelection()).modify) {
            sel = window.getSelection();
            if (!sel.isCollapsed) {
                sel.modify("move", "backward", "word");
                sel.modify("extend", "forward", "word");
            }
        }
    }
</script>
<p>put returns between paragraphs, for linebreak add 2 spaces at end</p>
<input type="button" onclick="Selected();" value="selected">

1 Ответ

1 голос
/ 26 сентября 2011

Если я вас правильно понимаю, вы хотите, чтобы кнопка привязывала выделение к целым словам. Если это так, вот как вы можете это сделать:

Демо: http://jsfiddle.net/uCHVQ/1/

Код:

function Selected() {
    var sel;
    if ((window.getSelection) && (sel = window.getSelection()).modify) {
        sel = window.getSelection();
        if (!sel.isCollapsed) {

            // Detect if selection is backwards
            var range = document.createRange();
            range.setStart(sel.anchorNode, sel.anchorOffset);
            range.setEnd(sel.focusNode, sel.focusOffset);
            var backwards = range.collapsed;
            range.detach();

            // modify() works on the focus of the selection
            var endNode = sel.focusNode, endOffset = sel.focusOffset;
            sel.collapse(sel.anchorNode, sel.anchorOffset);
            if (backwards) {
                sel.modify("move", "forward", "word");
                sel.extend(endNode, endOffset);
                sel.modify("extend", "backward", "word");

            } else {
                sel.modify("move", "backward", "word");
                sel.extend(endNode, endOffset);
                sel.modify("extend", "forward", "word");
            }
        }
    }
}

(Кстати, этот код изначально был из того, что я написал? Он выглядит знакомым, но я не могу его найти).

...