В javascript есть замечательный объект Range, который входит в стандарт DOM, определённый консорциумом всемирной паутины. В IE7 обещали включить поддержку Range, но это так и осталось на словах. Имеющийся в IE (и только в IE) объект TextRange не выдерживает никакой критики и не для чего серьёзного не пригоден (можно целую статью написать про маразм данного объекта).
Передо мной стояла задача написать WYSIWYG редактор генерирующий абсолютно валидный и абсолютно не избыточный html. Без Range было не обойтись. Из готового в инете нашёл только не рабочий скрипт некоего Jorgen Horstink, поэтому Range for IE пришлось писать с нуля.
Скрипт получился довольно увесистый (41 кБ), но если по удалять пробелы, табы, укоротить имена переменные я думаю до 15 кБ можно сжать. Из-за причуд Explorera скрипт полностью переписывался 3 раза. Объект имитирующий работу Range для IE тестировался на уже готовом WYSIWYG редакторе, работа которого полностью основана на Range.
Из недостатков работы могу отметить следующее:
или, как обычно
Скачать объект можно тут: W3C Range for IE
Буду рад, если скрипт Вам пригодится.
Передо мной стояла задача написать WYSIWYG редактор генерирующий абсолютно валидный и абсолютно не избыточный html. Без Range было не обойтись. Из готового в инете нашёл только не рабочий скрипт некоего Jorgen Horstink, поэтому Range for IE пришлось писать с нуля.
Скрипт получился довольно увесистый (41 кБ), но если по удалять пробелы, табы, укоротить имена переменные я думаю до 15 кБ можно сжать. Из-за причуд Explorera скрипт полностью переписывался 3 раза. Объект имитирующий работу Range для IE тестировался на уже готовом WYSIWYG редакторе, работа которого полностью основана на Range.
Из недостатков работы могу отметить следующее:
- Значение startOffset или endOffset какого-либо range может стать не правильным если производились какие то манипуляции с DOM (типа вставки или удалении). Но это просто обходится правильной последовательностью действий скрипта, тем более, что в других браузерах бываю такие проблемы (особенно в Opera).
var range = new Range (document.selection.createRange()); // Создание range для выделения
или, как обычно
var range = document.createRange(); // Создание нового, пустого range
Скачать объект можно тут: W3C Range for IE
Буду рад, если скрипт Вам пригодится.