我必须在表中有一个标记,因为PHP在那里编写了一个代码,可以将东西添加到之前创建的Javascript数组中。但是,我收到验证错误(4.01严格)。
我有什么方法可以做到这一点,或者仅仅禁止保留这样的脚本:
<TABLE>
<TR>
<SCRIPT></SCRIPT>
<TD>
</TD>
</TR>
</TABLE>
(这可能更好吗?):
<TABLE>
<TR>
<TD>
<SCRIPT></SCRIPT>
</TD>
</TR>
</TABLE>
更改doctype?你觉得怎么样?
答案 0 :(得分:37)
SCRIPT
中不允许 TR
,因为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-->
<!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">
答案 1 :(得分:4)
自HTML 5发行以来,在大多数类型的表元素(包括<script>
s)中包含tr
是合法的。
在https://html.spec.whatwg.org/multipage/tables.html,您可以看到table
,caption
,tbody
,thead
,tfoot
,{{ 3}},tr
和td
都包含“流内容” 或“一个或多个脚本支持元素” 。分别在th
和https://html.spec.whatwg.org/multipage/dom.html#flow-content-2处,我们看到script
被定义为流内容和脚本支持元素,因此可以在任何这些元素中使用。
值得注意的例外是https://html.spec.whatwg.org/multipage/dom.html#script-supporting-elements-2(只能包含col
和template
s)和colgroup
(不能内容)。您不能在其中任何一个中放置script
。
这意味着提问者的示例HTML在tr
...
<TABLE>
<TR>
<SCRIPT></SCRIPT>
<TD>
</TD>
</TR>
</TABLE>
...现在有效,您可以在col
上进行确认。
https://html5.validator.nu,指出script
内允许td
而不是tr
内,对于HTML 4是正确的,但现在已过时。