web-dev-qa-db-ja.com

<TABLE>内に<SCRIPT>タグを含めることはできますか?

PHPは、以前に作成したJavascript配列に何かを追加するコードをそこに書き込むため、テーブル内にタグを付ける必要がありました。ただし、検証エラー(4.01 strict)が発生します。

これを行う方法はありますか、それとも次のようなスクリプトを保持することは単に禁止されていますか?

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

(これは多分良いですか?):

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

Doctypeを変更しますか?どう思いますか?

25
fast-reflexes

HTML 5のリリース以来、trsを含むほとんどの種類のテーブル要素内に<script>を含めることは合法です。

https://html.spec.whatwg.org/multipage/tables.html で、 tablecaption のコンテンツモデルを確認できます。 =、 tbodytheadtfoottrtd 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 それぞれ、scriptsはフローコンテンツとスクリプトサポート要素の両方として定義されているため、これらの要素のいずれでも許可されていることがわかります。

注目すべき例外は colgroup s(colsとtemplatesのみを含めることができます)と col s(コンテンツを含めることはできません)です。どちらの中にもscriptを入れることはできません。

これは、tr ..内にスクリプトを含む質問者のサンプルHTMLを意味します。

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

...が有効になりました。これは https://html5.validator.n で確認できます。

Gumboの回答scriptsはtds内で許可されているが、trs内では許可されていないことを示し、HTML 4では正しいが、現在は古くなっています。

5
Mark Amery

SCRIPT は許可されていません TRTRのコンテンツモデルは(TH|TD)+として定義されているため:

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

これは、THまたはTDの1つ以上の要素を意味します。

ただし、SCRIPTTDで許可されています。 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">
37
Gumbo