我已经调查了这个问题:Why do browsers still inject <tbody> in HTML5?,这解释了为什么domParsing正在添加&lt; tbody&gt;如果解析后的表还没有它,则标记为dom。
我没有添加<tbody>
标记的问题,但我确实看到了IE 11的问题,其中有两个&lt; / tbody&gt;&lt; / tbody&gt;即使只有一个&lt; tbody&gt;,结束标记也会被添加到输出中。开始标记。这最终会破坏我的应用程序,因为生成的xml不再是有效的XHTML。
html = '<html><head><title>Serializer differences</title></head><body> <table> <tr> <td> <h2>SOFTWARE </h2> </td> <td> Some Text </td> </tr></table></body></html>';
domParser = new DOMParser();
xmlSerializer = new XMLSerializer();
doc = domParser.parseFromString(html, 'text/html');
console.log(xmlSerializer.serializeToString(doc));
你可以在这里玩小提琴:http://jsfiddle.net/bskinnersf/aSUX7/10/
在IE11上,输出为:
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Serializer differences</title></head><body> <table> <tbody><tr> <td> <h2>SOFTWARE </h2> </td> <td> Some Text </td> </tr>
</tbody></tbody>
</table></body></html>
Chrome,Firefox,Canary,只按预期输出单个</tbody>
标记。
我正在使用的输入html数据不受我的控制,不幸的是使用MS Word创建。我已经尝试过使用parseFromString(html,'application / xhtml + xml'),但它有很多问题与MS Word生成的HTML(惊喜!)。
我在javascript解析中还能做些什么来阻止这个双tbody结束标记吗?