我可以在 <TABLE> 中包含 <SCRIPT> 标记吗?
Posted
技术标签:
【中文标题】我可以在 <TABLE> 中包含 <SCRIPT> 标记吗?【英文标题】:Can I have <SCRIPT> tag inside <TABLE>? 【发布时间】:2011-04-09 04:00:31 【问题描述】:我必须在表格中添加一个标签,因为 php 在那里编写了一个代码,用于将内容添加到之前创建的 javascript 数组中。但是,我收到了一个验证错误(4.01 strict)。
我有什么办法可以做到这一点,或者只是禁止保留这样的脚本:
<TABLE>
<TR>
<SCRIPT></SCRIPT>
<TD>
</TD>
</TR>
</TABLE>
(这可能更好吗?):
<TABLE>
<TR>
<TD>
<SCRIPT></SCRIPT>
</TD>
</TR>
</TABLE>
更改文档类型?你怎么看?
【问题讨论】:
我认为您至少应该使用 Xhtml。 HTML 4 就是 IE6。 @leppie 使用 XHTML,您根本不应该有内联脚本块。如果你要到处都有内联脚本,那么假装你的 HTML 是 XML 只会导致额外的问题。 @leppie:XHTML 也是一个垂死的标准; HTML5 是未来。 我有很多内在事件,所以 XML 还不适合我 @Andreas Bonini:HTML 5 的定稿日期是 2018 年,我可以等。 【参考方案1】:TR
中不允许使用SCRIPT
,因为TR
的内容模型定义为(TH|TD)+
:
<!ELEMENT TR - O (TH|TD)+ -- table row -->
表示TH
或TD
的一个或多个元素。
但SCRIPT
允许在TD
中使用。见definition of TD
:
<!ELEMENT (TH|TD) - O (%flow;)* -- table header cell, table data cell-->
parameter entity flow 定义为:
<!ENTITY % flow "%block; | %inline;">
而inline定义为:
<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">
而special 定义为:
<!ENTITY % special
"A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO">
【讨论】:
这个答案已经过时了;script
s 内 tr
s 从 HTML 5 开始是合法的。我已经发布了我自己的 answer。【参考方案2】:
自 HTML 5 发布以来,在大多数类型的表格元素中包含<script>
是合法的,包括tr
s。
在https://html.spec.whatwg.org/multipage/tables.html,您可以看到table
、caption
、tbody
、thead
、tfoot
、tr
、td
和 th
的内容模型都包括“流内容”或“一个或多个脚本支持元素”。分别在https://html.spec.whatwg.org/multipage/dom.html#flow-content-2 和https://html.spec.whatwg.org/multipage/dom.html#script-supporting-elements-2,我们看到script
s 被定义为流内容和脚本支持元素,因此允许在这些元素中的任何一个中使用。
值得注意的例外是colgroup
s(只能包含col
s 和template
s)和col
s(不能包含内容)。您不能在其中任何一个中添加script
。
这意味着提问者的示例 HTML 与 tr
内的脚本...
<TABLE>
<TR>
<SCRIPT></SCRIPT>
<TD>
</TD>
</TR>
</TABLE>
...现在有效,您可以在https://html5.validator.nu 确认。
Gumbo's answer,声明script
s 允许在td
s 中,但不允许tr
s,对于 HTML 4 是正确的,但现在已经过时了。
【讨论】:
以上是关于我可以在 <TABLE> 中包含 <SCRIPT> 标记吗?的主要内容,如果未能解决你的问题,请参考以下文章