为什么setHTML(&#34; .. <table> <tbody> <tr> </tr> </tbody> </table>&#34;);但是然后getHTML();返回&#34; .. <table> <tbody> <tr> </tr> </tbody> </table>&#34; (GWT)?

时间:2014-04-06 15:23:17

标签: gwt

我不明白Gwt setHTML & getHTML是如何工作的。它似乎并不一致。

让我们看看这个例子:

myInlineHtml.setHTML(SafeHtmlUtils.fromSafeConstant("<table><tr><td>Test</td></tr></table>"));
System.out.println(myInlineHtml.getHTML());

输出:"<table><tbody><tr><td>Test</td></tr></tbody></table>"

显然,当我们为myInlineHtml设置html时,我们没有<tbody></tbody>,但是当getHTML来自myInlineHtml时,Gwt包含<tbody></tbody>

为什么会发生这种情况,因为当您想要获取Html值并且您认为它具有相同的价值时我可能会感到困惑,因为我们设置它但它没有?

  

这是独立于浏览器还是独立发生的   浏览器?这很严重。

2 个答案:

答案 0 :(得分:2)

这就是解析HTML的方式(预期浏览器如何解析它)。

在HTML 4中,TABLE was defined(就SGML而言)需要TBODY子元素,而TBODY is defined的开始和结束标记都是可选的。

在HTML5(编码浏览器实际解析HTML的方式)中,这是相同的:在构建table时,如果浏览器在解析之前找到tr,那么它是inserts a tbody元素tr好像最初有tbody

答案 1 :(得分:0)

即使您省略了某些键或参数,浏览器也会尝试正确格式化html。大多数现代浏览器几乎可以接受任何传递它而不会抱怨的东西,但它不会完全按照您的意图插入,而是会解释您的意思并插入有效的HTML。

因此,创建一个没有指定tbody节点的表是完全有效的,但浏览器会为你提供它。使用getHTML()后,您将访问已解析且格式正确的标记。