Javascript 如何从对象中选择节点,然后将这些节点重新定位到Internet Explorer 8+中的文档中? 我想要完成的是: 通过对XMLDOM对象执行XSL转换来创建一个对象,我们称之为“片段” 通过对结果对象运行XPATH查询来选择一些节点 比如说,在数组中收集这些节点 将“片段”附加到我的HTML文档中的某个容器中 改变这些节点中的任何一个,不是通过查询DOM,而是通过如下方式引用所述节点:nodeCollection[x] 我的动机:

Javascript 如何从对象中选择节点,然后将这些节点重新定位到Internet Explorer 8+中的文档中? 我想要完成的是: 通过对XMLDOM对象执行XSL转换来创建一个对象,我们称之为“片段” 通过对结果对象运行XPATH查询来选择一些节点 比如说,在数组中收集这些节点 将“片段”附加到我的HTML文档中的某个容器中 改变这些节点中的任何一个,不是通过查询DOM,而是通过如下方式引用所述节点:nodeCollection[x] 我的动机:,javascript,internet-explorer,xpath,xslt,Javascript,Internet Explorer,Xpath,Xslt,这本质上是一种缓存对象的方法,我确信我以后必须更改这些对象。因此,我希望缓存它们,而不是在每次需要它们时遍历DOM来查找它们。使用XPATH查询选择它们要快得多,一旦我这样做了,我就不再需要进行任何DOM遍历,在我的例子中,这可能会相当慢,我们这里讨论的是很多节点。我知道这通常是一个非常复杂的解决方案,但在我的特殊情况下,它会带来巨大的回报,至少在Firefox中是如此 我在Firefox中是如何做到的: 创建文档片段“xml”和“xsl”是xml DOM对象: xsltProcessor=ne

这本质上是一种缓存对象的方法,我确信我以后必须更改这些对象。因此,我希望缓存它们,而不是在每次需要它们时遍历DOM来查找它们。使用XPATH查询选择它们要快得多,一旦我这样做了,我就不再需要进行任何DOM遍历,在我的例子中,这可能会相当慢,我们这里讨论的是很多节点。我知道这通常是一个非常复杂的解决方案,但在我的特殊情况下,它会带来巨大的回报,至少在Firefox中是如此

我在Firefox中是如何做到的: 创建文档片段“xml”和“xsl”是xml DOM对象:

xsltProcessor=new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
fragment = xsltProcessor.transformToFragment(xml,document);
XPATH查询:

var nodes = document.evaluate("//div", fragment.firstChild, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
收集阵列中的节点:

nodeCollection = new Array();
i = 0;
node = nodes.iterateNext();
while(node) {
nodeCollection[i] = node;
node = nodes.iterateNext();
i++;
}
将片段附加到HTML文档中的容器:

document.getElementById("container").appendChild(fragment);
更改集合中的节点:

nodeCollection[0].style.border = '1px solid red';
。。它按预期工作

我在Internet Explorer中遇到的问题: 我曾经

var fragmentObject = new ActiveXObject("Msxml2.DOMDocument.3.0");
xml.transformNodeToObject(xsl,fragmentObject);
要创建可以执行XPATH查询的对象,请执行以下操作:

var nodes = fragmentObject.selectNodes("//div");
,但在这一步之后,我不知道如何将“fragmentObject”附加到HTML文档中的容器中,然后从“nodes”中选择各个节点,并像在Firefox上那样操作它们

我认为出了什么问题: “fragmentObject”是一个Msxml2.DOMDocument.3.0,它与文档片段完全不同,因此我不能将节点从它移动到HTML文档中。如果我尝试像

container.appendChild(nodes[1]);
我得到了这个错误:SCRIPT5022:DOM异常:HIERARCHY_REQUEST_ERR 3,这是在尝试插入一个不属于它的节点时通常发生的情况,或者至少这就是我发现的这个特定错误的解释


也许我不知道有某种类型的对象支持XPATH查询,可以附加到HTML文档中,而不是Msxml2.DOMDocument.3.0。如果要添加节点,请尝试Microsoft.XMLDOM,然后如您所说,它必须在DOM范围内。like document.appendChild将给出错误。 所以我们总是做document.body.append。。
类似地,检查此容器是否可以直接添加元素。

我已经尝试过,但没有解决问题。谢谢你的建议。