在JavaScript中,如何将DOM的序列化器部分转换为XHTML?

ave*_*net 5 javascript xhtml dom innerhtml xmlserializer

我想将部分DOM序列化为XHTML(有效的XML).我们假设我里面只有一个元素<body>,这是我要序列化的元素:

<div>
    <hr>
    <img src="/foo.png">
</div>
Run Code Online (Sandbox Code Playgroud)

有了这个,document.innerHTML给我几乎我想要的,除了它返回HTML,而不是XHTML(即,<hr>并且<img>将不会被正确关闭).既然innerHTML没有诀窍,我如何将部分DOM序列化为XHTML?

Ghi*_*rny 3

我不确定是否可以选择使用其他语言(在 JavaScript 引擎之上)。如果这有任何帮助,这将是 XQuery (XQIB) 的执行方式:

<script type="application/xquery">
  serialize(b:dom()//div)
</script>
Run Code Online (Sandbox Code Playgroud)

例如,在以下页面中,序列化的 XHTML 在页面上以文本形式写入,而不是在 div 标记之后的 script 标记:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>   
    <title>Serializing part of the DOM</title>
    <meta charset="UTF-8"/>
    <script type="text/javascript" src="mxqueryjs/mxqueryjs.nocache.js"></script>
  </head>
  <body>
    <div>
      <hr>
      <img src="/foo.png">
    </div>
    <script type="application/xquery">
      serialize(b:dom()//div)
    </script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

HTML DOM 映射到 XQuery 数据模型(XML 之上的数据模型)。b:dom() 返回页面的文档节点, //div 导航到所有后代 div 标签。然后,序列化函数将其序列化为字符串。

但是,这适用于 IE9+(不是 6+)以及最新版本的 Chrome、Firefox、Safari、Opera。