Могу ли я иметь тег <SCRIPT>внутри <TABLE>? - PullRequest
23 голосов
/ 07 сентября 2010

У меня есть тег внутри таблицы, потому что PHP пишет там код, который добавляет материал в ранее созданный массив Javascript.Тем не менее, я получаю ошибку проверки (строгая 4.01).

Есть ли какой-либо способ, которым я могу сделать это, или просто запрещено хранить скрипт как это:

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

(этоможет быть лучше?):

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

Изменить тип документа?Что ты думаешь?

Ответы [ 2 ]

37 голосов
/ 07 сентября 2010

SCRIPT не допускается в TR, поскольку модель содержимого TR определяется как (TH|TD)+:

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

Это означает, что один или несколько элементов TH или TD.

Но SCRIPT допускается в TD. См. определение TD:

<!ELEMENT (TH|TD)  - O (%flow;)*       -- table header cell, table data cell-->

Где параметр объекта flow определяется как:

<!ENTITY % flow "%block; | %inline;">

И inline определяется как:

<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">

А специальный определяется как:

<!ENTITY % special
   "A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO">
4 голосов
/ 23 ноября 2018

С момента выпуска HTML 5 является законным, чтобы иметь <script> внутри большинства видов элементов таблицы, включая tr s.

В https://html.spec.whatwg.org/multipage/tables.html, вы можете видеть, что модели содержимого для table, caption, tbody, thead,tfoot, tr, td и th все включают либо "Flow flow" или "один или несколько элементов, поддерживающих сценарии" .При 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 с (которые могут содержать только col с и template с) и col с (которые не могут иметь содержимое),Вы не можете поместить script внутрь ни одного из них.

Это означает, что пример HTML запрашивающего со скриптом внутри tr ...

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

...теперь действителен, что вы можете подтвердить на https://html5.validator.nu.

ответ Гамбо , заявив, что script с разрешены внутри td с, но не tr с, было правильно дляHTML 4, но сейчас устарел.

...