我不明白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值并且您认为它具有相同的价值时我可能会感到困惑,因为我们设置它但它没有?
这是独立于浏览器还是独立发生的 浏览器?这很严重。
答案 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()
后,您将访问已解析且格式正确的标记。