нет ли способа создать перевернутый (то есть справа налево) выбор из JavaScript? - PullRequest
4 голосов
/ 26 января 2011

Я пытаюсь создать выделение, которое идет справа налево в тексте, но кажется, что 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 выбор не создан.

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

1 Ответ

6 голосов
/ 26 января 2011

Это возможно в последних версиях всех основных браузеров, кроме 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 ), версия спецификации на момент их реализации не включала extend(), поэтому IE 9 не поддерживает его (см. Также эту ошибку для дальнейшего обсуждения обратных выборов).

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...