В более ранних версиях IE API выбора полностью отличался и также не имел никакой программной поддержки для создания обратных выборов.

аюсь создать выделение, которое идет справа налево в тексте, но кажется, что DOM Range API не позволяет мне это делать. (Я не вижу ничего об этом в спецификации - не то, чтобы я читал это внимательно - но все реализации, похоже, согласны не поддерживать его.)

Например, учитывая очень минимальный документ:

data:text/html,<div> this is a test </div>

Я могу использовать этот скрипт для включения редактирования и создания обычного выделения (например, из букмарклета, но для ясности добавлено перенос строки):

javascript:document.designMode='on';
var r=document.createRange(),d=document.getElementsByTagName('div')[0]; 
r.setStart(d.firstChild, 3); 
r.setEnd(d.firstChild, 7); 
window.getSelection().addRange(r); void(0);

Однако, если я поменяю местами 3 и 7, выбор не будет создан.

Кто-нибудь знает способ сделать это?

 Juan Mendes26 янв. 2011 г., 06:10
В чем разница между диапазоном, который идет слева направо и справа налево? Насколько я вижу, единственное отличие - возможность расширить выделение стрелками влево.
 Tim Down26 янв. 2011 г., 10:44
@Juan: Я, возможно, упускаю некоторые тонкости, но, как и вы, основное отличие, которое я вижу, это поведение клавиш со стрелками (все клавиши со стрелками, с клавишами Shift и Ctrl и без них). Кроме того, в некоторых средах и браузерах каретка отображается в дополнение к выделению в фокусе выделения (т. Е. В точке, в которой пользователь прекратил выделение).

Ответы на вопрос(1)

Решение Вопроса

кроме IE, черезextend() методSelection объект. Вот функция, которая создает обратную выборку из диапазона:

function selectRangeBackwards(range) {
    var sel = window.getSelection();
    var endRange = range.cloneRange();
    endRange.collapse(false);
    sel.removeAllRanges();
    sel.addRange(endRange);
    sel.extend(range.startContainer, range.startOffset);
}

Это невозможно в любой версии IE (до версии 11 включительно). Хотя IE 9 и более поздние версии реализуют диапазон DOM Level 2 и выбор текста HTML5 (теперь перенесены вWHATWG Range spec), версия спецификации на момент их реализациине включалextend()IE 9 не поддерживает его (см. такжеэта ошибка для дальнейшего обсуждения обратных выборов).

Вот просьба реализоватьextend() в трекере ошибок IE:https://connect.microsoft.com/IE/feedback/details/737106/implement-missing-extend-method-of-selection

В более ранних версиях IE API выбора полностью отличался и также не имел никакой программной поддержки для создания обратных выборов.

Ваш ответ на вопрос