在导入之前/期间/之后更改 DOM 节点的命名空间
Change namespace of a DOM node before/during/after import
我有一个XHTML文档。我使用 XHR 导入另一个应该是 XHTML 的 XML 文档,只是作者忘记在根目录上放一个xmlns
。因此,XML 文档中的所有节点都没有命名空间。
当我从另一个文档导入节点并将其附加到我的文档中时,我得到一个看起来正确的节点(例如 <h1>Hi Mom!</h1>
(,但这没有命名空间。因此,网络浏览器应用display:inline
.
我可以通过使用如下代码(未经测试(来解决此问题......但如果有更好的路线,我宁愿不这样做:
function changeNodeNamespace(node,namespace){
var dup = document.createElementNS(namespace,node.nodeName);
if (node.hasAttributes()){
for (var a=node.attributes,i=a.length;i--;){
dup.setAttributeNS(a[i].namespaceURI,a[i].nodeName,a[i].value);
}
}
if (node.hasChildNodes()){
for (var a=node.childNodes,i=0,len=a.length;i<len;++i){
if (a[i].nodeType==1){ // ELEMENT_NODE
dup.appendChild(changeNodeNamespace(a[i],namespace));
}else{
dup.appendChild(a[i].cloneNode(false));
}
}
}
return dup;
}
除了重新创作我导入的文档以获得正确的命名空间,或者基于原始元素递归地重新创建新命名空间中的每个元素/属性/文本节点之外,我可以导入元素本身并以某种方式将它们的命名空间更改为http://www.w3.org/1999/xhtml
?
XSLT可以做到这一点,像Sarissa或AJAXSLT这样的库可以帮助简化JavaScript语法。
相关文章:
- 将DOM节点值与字符串Javascript进行比较
- 如何判断何时将dom节点添加到文档中
- 当DOM节点在DOM中移动时,如何阻止Firefox触发mouseleave
- 如何检查DOM节点是否继承自构造函数
- 如何存储DOM节点
- 保留未修改的dom节点副本问题
- 无法在 IE 7/8 中使用 parentNode 抓取 DOM 节点
- 窗口对象属性返回一个dom节点
- js初学者-如何在比网页中的DOM节点低一个级别上立即解析所有子节点
- querySelectorAll polyfill用于所有DOM节点
- 如何判断文本输入字段dom节点是否*没有*带有javascript的选择
- 主干移除视图和DOM节点
- Metor:将html保存为字符串,然后将其转换为DOM节点
- 将属性从 DOM 节点复制到 dijit 小部件中
- 我可以将 HTML 字符串分配给 HTML DOM 节点的内部 HTML 属性吗?
- 在不删除/附加 DOM 节点的情况下对 DOM 节点进行重新排序
- 检查 DOM 节点是否位于 Iframe 内
- JavaScript Memory Leak - DOM 节点和后代上的垃圾回收
- DOM 节点清理如何在 d3 中工作
- 动态 dom 节点与 jquery