fas*_*xes 24 html javascript doctype script-tag
我必须在表中有一个标记,因为PHP在那里编写了一个代码,可以将东西添加到之前创建的Javascript数组中.但是,我收到验证错误(4.01严格).
有什么方法可以做到这一点,或者仅仅禁止保留这样的脚本:
<TABLE>
<TR>
<SCRIPT></SCRIPT>
<TD>
</TD>
</TR>
</TABLE>
Run Code Online (Sandbox Code Playgroud)
(这可能更好吗?):
<TABLE>
<TR>
<TD>
<SCRIPT></SCRIPT>
</TD>
</TR>
</TABLE>
Run Code Online (Sandbox Code Playgroud)
更改doctype?你怎么看?
Gum*_*mbo 37
SCRIPT不允许进入,TR因为内容模型TR定义为(TH|TD)+:
<!ELEMENT TR - O (TH|TD)+ -- table row -->
Run Code Online (Sandbox Code Playgroud)
这意味着的一个或多个元件TH或TD.
但SCRIPT允许进入TD.看到的定义TD:
<!ELEMENT (TH|TD) - O (%flow;)* -- table header cell, table data cell-->
Run Code Online (Sandbox Code Playgroud)
其中参数实体流定义为:
<!ENTITY % flow "%block; | %inline;">
Run Code Online (Sandbox Code Playgroud)
而内嵌的定义为:
<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">
Run Code Online (Sandbox Code Playgroud)
而且特别是定义为:
<!ENTITY % special
"A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO">
Run Code Online (Sandbox Code Playgroud)
自从 HTML 5 发布以来,在大多数类型的表格元素中都有一个内部元素是合法的<script>,包括trs。
在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分别,我们看到scripts 被定义为流内容和脚本支持元素,因此允许在任何这些元素中。
值得注意的例外是colgroups(只能包含cols 和templates)和cols(不能有内容)。你不能script在其中任何一个里面放一个。
这意味着提问者的示例 HTML 中包含一个脚本tr...
<TABLE>
<TR>
<SCRIPT></SCRIPT>
<TD>
</TD>
</TR>
</TABLE>
Run Code Online (Sandbox Code Playgroud)
... 现在有效,您可以在https://html5.validator.nu确认。
Gumbo 的回答指出scripts 允许在tds 内但不允许在s内tr,对于 HTML 4 是正确的,但现在已经过时了。