Подтвердить что ты не робот

Могу ли я иметь тэг SCRIPT> внутри <TABLE>?

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

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

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

(лучше ли это?):

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

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

4b9b3361

Ответ 1

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

В https://html.spec.whatwg.org/multipage/tables.html, вы можете увидеть, что модели содержимого для table, caption, tbody, thead, tfoot, tr, td и th все включают в себя либо "содержание потока" или msgstr "один или несколько элементов, поддерживающих скрипт". На https://html.spec.whatwg.org/multipage/dom.html#flow-content-2 и https://html.spec.whatwg.org/multipage/dom.html#script-supporting-elements-2 соответственно, мы видим, что script определяется как содержимое потока и элементы, поддерживающие сценарий, и поэтому разрешен в любом из этих элементов.

Заметными исключениями являются colgroup (которая может содержать только col и template s) и col (которые не могут иметь содержимое). Вы не можете поместить script внутри любого из них.

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

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

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

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

Ответ 2

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

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

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