как получить промежуток выбранной части, используя Javascript - PullRequest
1 голос
/ 22 октября 2009

Есть ли способ получить выделенный старт выбора и выделенную длину на отрезке?

Спасибо

Ответы [ 3 ]

1 голос
/ 22 октября 2009

Попробуйте это:

  var span = document.getElementById('span1');
  if (document.selection) { //IE
      var bm = document.selection.createRange().getBookmark();
      var sel = span.createTextRange();
      sel.moveToBookmark(bm);

      var sleft = span.createTextRange();
      sleft.collapse(true);
      sleft.setEndPoint("EndToStart", sel);
      span.selectionStart = sleft.text.length
      span.selectionEnd = sleft.text.length + sel.text.length;
      span.selectedText = sel.text;
  }
  else if (span.selectionStart){ //FF
     span.selectedText = span.substring(span.selectionStart,span.selectionEnd);
  }

  alert("Selection Start==> " + span.selectionStart + "\n" +
     "Selection End  ==> " + span.selectionEnd + "\n" +
     "Selected Text  ==> " + span.selectedText + "\n" +
     "TextArea Value ==> " + span.value);
1 голос
/ 22 октября 2009

Я использую свою собственную оптимизацию алгоритмов в IERange , которая обеспечивает обертку вокруг TextRange IE (что вы получаете из выбора в IE), чтобы дать им тот же интерфейс, что и в DOM Ranges.

Чтобы получить выделение в документе, используйте что-то вроде следующего:

var sel = window.getSelection(); // Provided by IERange in IE, built-in in other browsers
var range = sel.getRangeAt(0); // Note this doesn't work in Safari 2

range теперь имеет свойства startContainer и startOffset, которые являются соответственно ссылкой на узел и смещением в этом узле, которые представляют начало выделения, и соответствующие свойства endContainer и endOffset, которые представляет конец выбора.

0 голосов
/ 22 октября 2009

Вы можете найти ответы на некоторые вопросы в этом сообщении quirksmode :

...