Ответ 1
createContextualFragment()
- это метод объектов Range
, который создает фрагмент документа из строки HTML. Он присутствует в Firefox и WebKit и Opera, но в настоящее время нестандартен (не в спецификации уровня DOM уровня 2, но находится в процессе работы DOM Parsing and Serialization spec), и IE 9 не реализовал его, что согласуется с общим подходом Microsoft к внедрению стандартных функций в IE 9, который ранее отсутствовал в IE. ExtJs должен использовать этот метод, хотя довольно глупо, так как он нестандартен, и тот же результат может быть легко достигнут с помощью innerHTML
, который поддерживается везде.
UPDATE
Вы можете исправить следующее в IE 9, поскольку оно позволяет расширять прототипы объектов хоста, которых не было в предыдущих версиях. Ниже приведена наивная реализация createContextualFragment()
, адаптированная из моей библиотеки Rangy, но подходит для большинства целей. См. эту проблему Rangy для получения более подробной информации и для более полной реализации.
Обратите внимание, что это не будет работать в IE < 9, поскольку эти браузеры не имеют реализации DOM Range.
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;
};
}