我可以在<TABLE>中使用<script>标签吗?</script>

时间:2010-09-07 11:34:36

标签: javascript html doctype script-tag

我必须在表中有一个标记,因为PHP在那里编写了一个代码,可以将东西添加到之前创建的Javascript数组中。但是,我收到验证错误(4.01严格)。

我有什么方法可以做到这一点,或者仅仅禁止保留这样的脚本:

<TABLE>
    <TR>
      <SCRIPT></SCRIPT>
        <TD>
        </TD>
    </TR>
</TABLE>

(这可能更好吗?):

<TABLE>
    <TR>
        <TD>
         <SCRIPT></SCRIPT>
        </TD>
    </TR>
</TABLE>

更改doctype?你觉得怎么样?

2 个答案:

答案 0 :(得分:37)

SCRIPT中不允许

TR,因为TR的内容模型定义为(TH|TD)+

<!ELEMENT TR       - O (TH|TD)+        -- table row -->

这意味着THTD的一个或多个元素。

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">

答案 1 :(得分:4)

自HTML 5发行以来,在大多数类型的表元素(包括<script> s)中包含tr是合法的。

https://html.spec.whatwg.org/multipage/tables.html,您可以看到tablecaptiontbodytheadtfoot,{{ 3}},trtd都包含“流内容” “一个或多个脚本支持元素” 。分别在thhttps://html.spec.whatwg.org/multipage/dom.html#flow-content-2处,我们看到script被定义为流内容和脚本支持元素,因此可以在任何这些元素中使用。

值得注意的例外是https://html.spec.whatwg.org/multipage/dom.html#script-supporting-elements-2(只能包含coltemplate s)和colgroup(不能内容)。您不能在其中任何一个中放置script

这意味着提问者的示例HTML在tr ...

中带有脚本
<TABLE>
    <TR>
      <SCRIPT></SCRIPT>
        <TD>
        </TD>
    </TR>
</TABLE>

...现在有效,您可以在col上进行确认。

https://html5.validator.nu,指出script内允许td而不是tr内,对于HTML 4是正确的,但现在已过时。