我可以在<TABLE>中包含<SCRIPT>标签吗?

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)

这意味着的一个或多个元件THTD.

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)


Mar*_*ery 9

自从 HTML 5 发布以来,在大多数类型的表格元素中都有一个内部元素合法的<script>,包括trs。

https://html.spec.whatwg.org/multipage/tables.html,你可以看到内容模型tablecaptiontbodytheadtfoottrtdth所有的包括两种“流内容”“一个或多个脚本的支持元素”。在https://html.spec.whatwg.org/multipage/dom.html#flow-content-2https://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 是正确的,但现在已经过时了。