Установить диапазон выбора в JavaScript IE8 - PullRequest
6 голосов
/ 16 декабря 2011

Я работаю над редактором wysiwyg, используя div [contenteditable = true], и ​​я хочу установить диапазон выбора от смещения X узла A до смещения Y узла B. Я сделал это хорошо в Firefox и IE9, кодis:

var range = document.createRange();
range.setStart(selectNode, 0);
range.setEnd(selectNode, selectNode.textContent.length);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);

Но в IE8 объект диапазона совершенно другой, у него нет setStart / setEnd, а у объекта выбора нет содержимого remove / addRange.Пожалуйста, помогите,

Ответы [ 2 ]

4 голосов
/ 16 декабря 2011

Посмотрите на ранги. Это кросс-браузерный диапазон / выбор API. Это, вероятно, то, что вам нужно.

http://code.google.com/p/rangy/

3 голосов
/ 20 апреля 2014

У меня была похожая проблема, обнаружил этот полифилл, который был весьма полезен для меня, так как я не мог использовать rangy в моей ситуации: http://bl.ocks.org/visnup/3456262

Изменить: исходная ссылка действительно умерла. Оглядываясь назад на мой старый код, кажется, что полифилл никогда не входил в код выпуска, мы просто пошли с обнаружением функций следующим образом:

if(window.getSelection || document.selection){

затем при наведении мыши:

var range;
if(window.getSelection){
    var selection = window.getSelection();
    range = selection.getRangeAt(0);
} else if(document.selection){
    range = document.selection.createRange();
    if(!range.surroundContents){
        // then give up, feature not fully implemented
    }
}
// now do stuff with range (i.e. the selection)

... и поэтому пользователи IE8 не поддерживаются этой функцией.

Однако, еще не все потеряно: на Github есть более новый (чем мой первоначальный ответ) полифилл, который может сработать, если вам потребуется поддержка IE8. Он выглядит одновременно довольно стройным и всеобъемлющим.

...