2015-01-25 4 views
0

У меня есть способ получить выбранные данные в моем редактируемом div для всех браузеров, кроме IE8.Получить позицию каретки в редактируемом div IE8

может кто-то помочь мне

это то, что я сейчас

get_selection: function() { 
     var range; 
     var bookmark; 
     var length = this._displayText().length; 
     if (window.getSelection) { 
      range = window.getSelection().getRangeAt(0); 
      if (range.commonAncestorContainer.parentNode == this._display) { 
       return { start: range.startOffset, end: range.endOffset, text: this._displayText().substr(range.startOffset, range.endOffset - range.startOffset) }; 
      } 
     } 
     else if (document.selection) { 
//solution for IE8 and lower 
     } 
     return { start: 0, end: 0, text: "" }; 
    }, 

this._display мой редактируемый элемент DIV. this._displayText() вернет textContent из моего отображаемого элемента. Я сделал для этого функцию sepperate, потому что textcontent не поддерживается в IE8, и я использую innerText для IE8.

Я уже пробовал какое-то решение, которое я нашел в google, но ничего не дал мне начальную и конечную позицию каррета.

ответ

0

IE 8 и перед использованием его собственный механизм выбора несовместим со стандартом. Для получения дополнительной информации см. selection object и TextRange object на MSDN.

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

var Rng = document.selection.createRange(); 

Чем вы можете получить выделенный текст, если какой-либо помощи Rng.text, экранные координаты выбранной области с помощью Rng.getClientRects() и т.д.

+0

что вы мне скажите, я уже знаю. ты помог мне, но ты не ответил на мой вопрос. Я до сих пор не знаю, как получить начальную и конечную позицию моего carret в IE8 – user3677584

0

ОК. это решение, которое я только что нашел, который работает отлично. Я отправляю его, чтобы помочь другим, кому это нужно.

get_selection: function() { 
     var range; 
     var preRange; 
     if (window.getSelection) { 
      range = window.getSelection().getRangeAt(0); 
      if (range.commonAncestorContainer.parentNode == this._display) { 
       return { start: range.startOffset, end: range.endOffset, text: range.toString() }; 
      } 
     } 
     else if (document.selection) { 
      range = document.selection.createRange(); 
      preRange = document.body.createTextRange(); 
      preRange.moveToElementText(this._display); 
      preRange.setEndPoint("EndToStart", range); 
      return { start: preRange.text.length, end: preRange.text.length + range.text.length, text: range.text }; 
     } 
     return { start: 0, end: 0, text: "" }; 
    }, 
Смежные вопросы