Функции DOM Range и HTML5 Selection
Мы писали много о поддержке, имеющейся в Internet Explorer 9 и призванной дать разработчикам возможность создавать
Разработчикам функция HTML5 Selection обеспечивает способ получения и использования программным путем выделенного пользователем текста, как указано в примере кода ниже:
var selection = window.getSelection();
var range = selection.getRangeAt(0);
Как вы могли догадаться по именам, используемым в вышеприведенном фрагменте кода, часть документа, которую вы получаете, определена в терминах
var contents = range.extractContents();
var childNodes = contents.childNodes;
for (var i = 0; i < childNodes.length; i++)
{
if (childNodes[i].nodeName != "#text")
childNodes[i].style.color = "red";
range.insertNode(childNodes[i].cloneNode(true));
}
В Internet Explorer давно была схожая функциональность, доступная через проприетарные объекты TextRange и HTMLDocument.selection. TextRanges создавались и управлялись через символы, слова и строки. Это были удобные абстракции, но иногда они могли привести к некой двусмысленности и они не упрощали работу с DOM API.
Для того, чтобы увидеть некоторые из преимуществ DOM Range и HTML5 Selection, мы воспользуемся
Выбор цвета текста является примером возможностей, которые доступны через метод execCommand TextRange, имеющий набор предопределенных операций. Но что насчет операций, которые не определены в методе, как, например, перевод фрагмента текста?
Чтобы увидеть пример в действии, попытайтесь использовать команду ‘Translate’ в примере. Эта команда делает AJAX-вызов к службе Bing Translate, передавая каждый из элементов в выделенном тексте для перевода. Поскольку функция Range работает с диапазоном узлов и смещений, это, безусловно, другая операция; операция получает некоторые узлы, выполняет операцию, а затем помещает их обратно. Такой шаблон позволяет обобщить код для других операций...
Если я попытаюсь проделать ту же самую вещь с TextRange, я не смогу использовать execCommand. Чтобы сделать это, я должен извлечь текстовый контент, передать его на перевод, затем удалить старый текст и повторно вставить новый. В ходе этого процесса все предыдущие операции наподобие изменения текста или размера будут потеряны, поскольку отсутствие информации об узлах не позволяет извлекать индивидуальные фрагменты, редактировать их, а затем вернуть их в оригинальные контейнеры.
Как Дин упомянул в
Однако, стоит отметить, если у вас есть приложение, зависящее от старых API, они будут и дальше работать, упростив путь обновления до IE9. Везде, где возможно, мы рекомендуем использовать
Мы надеемся, что конечным итогом поддержки этих API станут более удобные сценарии для вас, разработчиков. В результате нашей работы количество баллов в тесте ACID3 у IE9
Было забавно работать над этим, и я с нетерпением жду, чтобы увидеть, что с данными функциями смогут сделать другие разработчики.
Джон Сейтел (Jon Seitel),
программный менеджер Internet Explorer
Источник:
Перевод: evgeniya.zwezdina
По теме
- Еще пару слов о защите пользователей IE9 от отслеживания
- [Temp] Бенчмарк HTML5 Blizzard: проверьте аппаратное ускорение вашего браузера
- [Temp] Работаем с закрепление сайтов
- Блог IE в 2010: на связи с вами
- С новым аппаратно-ускоренным годом!
- HTML5: экспериментальный и готовый к использованию
- Доступно декабрьское накопительное обновлениие безопасности для IE
- IE9 и конфиденциальность: введение в защиту от слежения
- Более быстрый и умный список Compatibility View List в IE9
- Субпиксельные шрифты в Internet Explorer 9