为什么IE在解析和序列化HTML时会在表中注入额外的结束标记?

时间:2014-04-28 17:54:00

标签: javascript html-parsing

我已经调查了这个问题: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结束标记吗?

0 个答案:

没有答案