代码之家  ›  专栏  ›  技术社区  ›  Juriy

Firefox选择文本范围

  •  2
  • Juriy  · 技术社区  · 14 年前

    一个简单的问题:如何在Firefox中通过编程选择页面的文本片段?例如,有一段文字,用户单击按钮,选择10到15之间的符号,就像用户以常规方式拖动鼠标一样。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Marcel Korpel    14 年前

    在Firefox中,您可以使用 Range 对象,由指定 W3C .

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8">   
        <title>Range test</title>
        <style>   
            #trigger { background: lightgreen }
        </style>                 
      </head>                    
      <body>                     
        <p id="test">This is some (rather short) text.</p>
        <span id="trigger">→ Click here! ←</span>
          <!-- Yes, I know, ‘Click here!’ is an evil message -->
        <script>
    var testCase = function () {
        var userSelection;
    
        if (window.getSelection) {  // W3C default
            userSelection = window.getSelection();
        }  // an extra branch would be necessary if you want to support IE
    
        var textNode = document.getElementById('test').firstChild;
        var theRange = document.createRange();
    
        // select 10th–15th character (counting starts at 0)
        theRange.setStart(textNode, 9);
        theRange.setEnd(textNode, 14);
    
        // set user selection    
        userSelection.addRange(theRange);
    };
    
    window.onload = function () {
        var el = document.getElementById('trigger');
        el.onclick = testCase;
    };
        </script>
      </body>
    </html>
    

    请注意,您必须 TextNode 设置选择,即 firstChild <p> 元素。还要注意这个例子 不会工作 在IE中,您必须使用一些专有的方法。很好的介绍正在进行中 QuirksMode .

        2
  •  1
  •   jimbo    14 年前

    我不确定是否有一种方法可以对任意的DOM元素(如段落)执行此操作,但对于文本区域元素,我相信您需要使用 selectionStart selectionEnd 属性并指定开始和结束位置。

    var textarea = document.getElementsByTagName('textarea')[0];
    textarea.selectionStart = 10;
    textarea.selectionEnd = 15;
    

    希望这有帮助!