Firefox выбрать текстовый диапазон - PullRequest
2 голосов
/ 11 мая 2010

Быстрый вопрос: как программно выделить фрагмент текста страницы в FireFox? Например, есть абзац текста, пользователь нажимает кнопку, и символы с 10-го по 15-й выбираются так, как если бы пользователь перетаскивал мышь обычным способом.

Ответы [ 2 ]

3 голосов
/ 12 мая 2010

В 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 .

1 голос
/ 11 мая 2010

Я не уверен, есть ли способ сделать это для произвольных элементов DOM, таких как абзацы, но для элементов textarea я считаю, что вам нужно использовать selectionStart и selectionEnd свойств и укажите, где начинать и заканчивать.

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...