gpt4 book ai didi

JavaScript:XMLSerializer.serializeToString() 的替代品?

转载 作者:可可西里 更新时间:2023-11-01 02:02:31 26 4
gpt4 key购买 nike

我正在使用 Seam 框架和 RichFaces AJAX 库开发一个网站(这些对于手头的问题来说并不是那么重要 - 只是一些背景知识)。

不过,我似乎在 RichFaces 中发现了一个错误,在某些情况下,该错误会导致基于 AJAX 的更新在 IE8 中失败(有关更多信息,请参见此处:http://community.jboss.org/message/585737)。

异常发生的代码如下:

   var anchor = oldnode.parentNode;

if(!window.opera
&& !A4J.AJAX.isWebkitBreakingAmps()
&& oldnode.outerHTML
&& !oldnode.tagName.match( /(tbody|thead|tfoot|tr|th|td)/i ) ) {
LOG.debug("Replace content of node by outerHTML()");
if (!Sarissa._SARISSA_IS_IE || oldnode.tagName.toLowerCase()!="table") {
try {
oldnode.innerHTML = "";
} catch(e){
LOG.error("Error to clear node content by innerHTML "+e.message);
Sarissa.clearChildNodes(oldnode);
}
}
oldnode.outerHTML = new XMLSerializer().serializeToString(newnode);
}

最后一行(带有 XMLSerializer 的那一行)是在 IE 中发生异常的地方。我想知道是否有人知道我可以在那里使用的任何替换方法/库/等(仅在 IE 上可以)。谢谢。

编辑:在做了一些进一步的研究之后,似乎异常不是由未定义 XMLSerializer 引起的,而是当我尝试将 XMLSerializer 的输出分配给 oldnode 的 outerHTML 属性时似乎发生了。

这很奇怪,因为它在大多数情况下都有效,但只在少数情况下失败(框架的这一部分似乎相当重要)。

谁能想到什么时候 XMLSerializer 的输出(从调试器显示的内容来看,它看起来是非常有效的 HTML)不可分配给元素的 outerHTML 属性

最奇怪的是,如果我要克隆元素(使用 cloneNode(true))然后设置 outerHTML,它似乎可以工作。

最佳答案

在 IE 中,您可以简单地使用 XML 节点的 xml 属性,前提是 newnode 确实是 XML 节点而不是 HTML 节点:

function serializeXmlNode(xmlNode) {
if (typeof window.XMLSerializer != "undefined") {
return (new window.XMLSerializer()).serializeToString(xmlNode);
} else if (typeof xmlNode.xml != "undefined") {
return xmlNode.xml;
}
return "";
}

oldnode.outerHTML = serializeXmlNode(newnode);

更新问题更新

我不会使用 outerHTML 来替换元素。它没有得到普遍支持。相反,您可以混合使用 innerHTML 和标准 DOM 方法,如下所示:

var tempEl = document.createElement("div");
tempEl.innerHTML = serializeXmlNode(newnode);
oldnode.parentNode.replaceChild(oldnode, tempEl.firstChild);

关于JavaScript:XMLSerializer.serializeToString() 的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4916327/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com