PHPは、以前に作成したJavascript配列に何かを追加するコードをそこに書き込むため、テーブル内にタグを付ける必要がありました。ただし、検証エラー(4.01 strict)が発生します。
これを行う方法はありますか、それとも次のようなスクリプトを保持することは単に禁止されていますか?
<TABLE>
<TR>
<SCRIPT></SCRIPT>
<TD>
</TD>
</TR>
</TABLE>
(これは多分良いですか?):
<TABLE>
<TR>
<TD>
<SCRIPT></SCRIPT>
</TD>
</TR>
</TABLE>
Doctypeを変更しますか?どう思いますか?
HTML 5のリリース以来、はtr
sを含むほとんどの種類のテーブル要素内に<script>
を含めることは合法です。
https://html.spec.whatwg.org/multipage/tables.html で、 table
、 caption
のコンテンツモデルを確認できます。 =、 tbody
、 thead
、 tfoot
、 tr
、 td
and th
すべてに "フローコンテンツ"または "1つ以上のスクリプトサポート要素"。 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
s(col
sとtemplate
sのみを含めることができます)と col
s(コンテンツを含めることはできません)です。どちらの中にもscript
を入れることはできません。
これは、tr
..内にスクリプトを含む質問者のサンプルHTMLを意味します。
<TABLE>
<TR>
<SCRIPT></SCRIPT>
<TD>
</TD>
</TR>
</TABLE>
...が有効になりました。これは https://html5.validator.n で確認できます。
Gumboの回答 、script
sはtd
s内で許可されているが、tr
s内では許可されていないことを示し、HTML 4では正しいが、現在は古くなっています。
SCRIPT
は許可されていません TR
TR
のコンテンツモデルは(TH|TD)+
として定義されているため:
<!ELEMENT TR - O (TH|TD)+ -- table row -->
これは、TH
またはTD
の1つ以上の要素を意味します。
ただし、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;">
そして special は次のように定義されます:
<!ENTITY % special
"A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO">