2011-09-24 72 views
0

如何在window.getSelection中選擇多個單詞。如何在window.getSelection中選擇多個單詞

在此代碼中,如果我選擇tweenen paragrap,它會鎖定單詞paragraphs而錯過了`之間。我需要選擇兩個單詞。

甚至我選擇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

**請在使用範圍和選項時使用Rangy。 http://code.google.com/p/rangy/ –

+0

@Matt Ball,Rangy不能選擇完整的單詞,如果我選擇'dd 2 spa',它只顯示'dd 2 spa'而不是'add 2 spaces' 。 – cj333

+0

@ cj333:你說得對。這是我打算在不久的將來給Rangy添加的東西。 –

回答

1

如果我的理解正確,您希望按鈕將選擇對齊到整個單詞。如果是這樣,這裏是你如何能做到這一點:

現場演示: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"); 
      } 
     } 
    } 
} 

(順便說一句,是什麼最初的代碼我已經張貼這看起來很熟悉但我找不到)。

相關問題