2011-12-16 3 views
6

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

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, а объект выбора не имеет удалить/AddRange питания. Пожалуйста, помогите,

ответ

4

Посмотрите на rangy. Его перекрестный браузер/API выбора. Вероятно, это то, что вам нужно.

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

+3

Rangely-core.js сжат 42kb, который может быть предметом рассмотрения дизайна. – Roberto

3

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

Edit: оригинальная ссылка действительно пошел мертвым. Оглядываясь на мой старый код это выглядит как polyfill никогда не сделал его в код релиза, мы просто пошли с обнаружения особенностей следующим образом:

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

затем на MouseUp:

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 не поддерживаются для этой функции.

Однако все не потеряно: есть newer (than my original answer) polyfill on Github, который может работать, если вам нужно поддерживать IE8. Он выглядит как довольно скудный и всеобъемлющий.

+1

Это решение сжато всего в 800 байт и нацелено на IE8 за каждое требование. Это может быть лучшим решением в отличие от Rangely.js, который намного тяжелее. – Roberto

+0

Это работает как прелесть для меня, и я думаю, что это лучший способ сделать это. – AsGoodAsItGets

+0

Ссылка мертва. Может ли кто-нибудь предоставить новую ссылку? –

Смежные вопросы