javascript - 在导入之前/期间/之后更改 DOM 节点的命名空间

标签 javascript html xml xhtml namespaces

我有一个 XHTML 文档。我使用 XHR 导入另一个应该是 XHTML 的 XML 文档,除了作者忘记放一个 xmlns在根上。因此,XML 文档中的所有节点都没有命名空间。

当我从这个其他文档导入一个节点并将其附加到我的文档时,我得到一个看起来正确的节点(例如 <h1>Hi Mom!</h1> )但没有 namespace 。因此,网络浏览器应用 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 可以 do the trick ,以及一个库,例如 SarissaAJAXSLT有助于简化 JavaScript 语法。

关于javascript - 在导入之前/期间/之后更改 DOM 节点的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9831818/

相关文章:

javascript整个页面飞进飞出的效果?

html - css { 方向 : rtl } 问题

javascript - 选择文件后立即提交表格

c# - 使用 XDocument 读取 XML 时不解码转义字符

xml - Excel 何时在 workbook.xml(或其他 xml)文件中用单引号括起工作表名称?

javascript - 将 HTML 负载解析为 JSON

javascript - 这个js是用什么coffeescript生成的?

xml - 多个 ID - 多个 IDREF - 是否可以将特定 IDREF 分配给 DTD 中的特定 ID?

javascript - 如何更改按钮上计数器的颜色?

javascript - 使用javascript和html表单计算两点之间的距离