我一直在网上寻找资料,并且可以确定我已经知道答案了(“否”),但是我想检查一下:
IE是否支持importNode()?有没有比遍历DOM和创建节点更好的选择了? (我见过the clasic article by Anthony Holdener,但现在已经有一年多了,我希望IE有所发展,或者有人可以解决此问题)
谢谢。
最佳答案
我还没有听说这已经改变,在约翰·雷西格(John Resig)的recent post中,他说:
另请参阅cross-browser importnode()上的“列出列表”文章,因为该文章包含Internet Explorer的特定解决方法。
引用后代
if (!document.ELEMENT_NODE) {
document.ELEMENT_NODE = 1;
document.ATTRIBUTE_NODE = 2;
document.TEXT_NODE = 3;
document.CDATA_SECTION_NODE = 4;
document.ENTITY_REFERENCE_NODE = 5;
document.ENTITY_NODE = 6;
document.PROCESSING_INSTRUCTION_NODE = 7;
document.COMMENT_NODE = 8;
document.DOCUMENT_NODE = 9;
document.DOCUMENT_TYPE_NODE = 10;
document.DOCUMENT_FRAGMENT_NODE = 11;
document.NOTATION_NODE = 12;
}
document._importNode = function(node, allChildren) {
switch (node.nodeType) {
case document.ELEMENT_NODE:
var newNode = document.createElement(node »
.nodeName);
/* does the node have any attributes to add? */
if (node.attributes && node.attributes »
.length > 0)
for (var i = 0; il = node.attributes.length;i < il)
newNode.setAttribute(node.attributes[i].nodeName,
node.getAttribute(node.attributes[i++].nodeName));
/* are we going after children too, and does the node have any? */
if (allChildren && node.childNodes && node.childNodes.length > 0)
for (var i = 0; il = node.childNodes.length; i < il)
newNode.appendChild(document._importNode(node.childNodes[i++], allChildren));
return newNode;
break;
case document.TEXT_NODE:
case document.CDATA_SECTION_NODE:
case document.COMMENT_NODE:
return document.createTextNode(node.nodeValue);
break;
}
};
var newNode = null, importedNode = null;
newNode = xhrResponse.responseXML.getElementsByTagName('title')[0].childNodes[0];
if (newNode.nodeType != document.ELEMENT_NODE)
newNode = newNode.nextSibling;
if (newNode) {
importedNode = document._importNode(newNode, true);
document.getElementById('divTitleContainer').appendChild(importedNode);
if (!document.importNode)
document.getElementById('divTitleContainer').innerHTML = document.getElementById('divTitleContainer').innerHTML;
}