Pull to refresh

W3C Range for Internet Explorer

Reading time1 min
Views541
В javascript есть замечательный объект Range, который входит в стандарт DOM, определённый консорциумом всемирной паутины. В IE7 обещали включить поддержку Range, но это так и осталось на словах. Имеющийся в IE (и только в IE) объект TextRange не выдерживает никакой критики и не для чего серьёзного не пригоден (можно целую статью написать про маразм данного объекта).

Передо мной стояла задача написать WYSIWYG редактор генерирующий абсолютно валидный и абсолютно не избыточный html. Без Range было не обойтись. Из готового в инете нашёл только не рабочий скрипт некоего Jorgen Horstink, поэтому Range for IE пришлось писать с нуля.

Скрипт получился довольно увесистый (41 кБ), но если по удалять пробелы, табы, укоротить имена переменные я думаю до 15 кБ можно сжать. Из-за причуд Explorera скрипт полностью переписывался 3 раза. Объект имитирующий работу Range для IE тестировался на уже готовом WYSIWYG редакторе, работа которого полностью основана на Range.

Из недостатков работы могу отметить следующее:
  • Значение startOffset или endOffset какого-либо range может стать не правильным если производились какие то манипуляции с DOM (типа вставки или удалении). Но это просто обходится правильной последовательностью действий скрипта, тем более, что в других браузерах бываю такие проблемы (особенно в Opera).
Внизу представлен пример использования объекта Range для IE:

var range = new Range (document.selection.createRange()); // Создание range для выделения

или, как обычно

var range = document.createRange(); // Создание нового, пустого range

Скачать объект можно тут: W3C Range for IE

Буду рад, если скрипт Вам пригодится.
Tags:
Hubs:
Total votes 10: ↑8 and ↓2+6
Comments9

Articles