createContextualFragment()
- это метод Range
объектов, который создает фрагмент документа из строки HTML. Он присутствует в Firefox, WebKit и Opera, но в настоящее время нестандартен (он не входит в спецификацию DOM Level 2 Range , но находится в стадии разработки Спецификация синтаксического анализа и сериализации DOM ) и IE 9 не реализовали его, что согласуется с общим подходом Microsoft к реализации стандартных функций в IE 9, который ранее отсутствовал в IE. ExtJs должен использовать этот метод, хотя довольно глупо, поскольку он нестандартный, и тот же результат может быть легко достигнут с помощью innerHTML
, который поддерживается везде.
UPDATE
В IE 9 можно добавить следующее: оно позволяет расширять прототипы хост-объектов, чего не было в предыдущих версиях. Ниже приведена наивная реализация createContextualFragment()
, адаптированная из моей библиотеки Rangy , но подходящая для большинства применений. См. этот выпуск Rangy для получения подробной информации и для более тщательной реализации.
Обратите внимание, что это не будет работать в IE <9, потому что эти браузеры не имеют реализации DOM Range. </p>
if (typeof Range.prototype.createContextualFragment == "undefined") {
Range.prototype.createContextualFragment = function(html) {
var startNode = this.startContainer;
var doc = startNode.nodeType == 9 ? startNode : startNode.ownerDocument;
var container = doc.createElement("div");
container.innerHTML = html;
var frag = doc.createDocumentFragment(), n;
while ( (n = container.firstChild) ) {
frag.appendChild(n);
}
return frag;
};
}