9

そこで最近<>...</>、Firefoxのjavascriptでタグを使用できることを発見しました。これは、HTMLまたはCSSのブロックを定義するときに便利です。

GM_addStyle(<><![CDATA[
  .page { display: block }
  /* ... */
  td { vertical-align: top }
]]></>);
//...
div.innerHTML = <><![CDATA[
  <table class="section">
    <!-- ... -->
  </table>
]]></>;

しかし、何が起こっているのか正確にはわかりません。使用している構文を理解するのが好きです。正確には何が<>...</>返されますか?内容をで囲むとエスケープがうまくいくことに気づきましたが<![CDATA[...]]>、そこで何が起こっているのでしょうか。これはFirefoxのみですか、それともクロスブラウザですか?

私はこれをオンラインで調べようとしましたが、通常のgoogle/symbolの問題に遭遇しました。さらに、 googleCDATAjavascriptの結果のほとんどは関連性がないようでした。

4

3 に答える 3

4

空のタグは、XMLのblobをラップするためのルート要素を作成する方法にすぎないと思います。これは「このルート要素の子をXMLとして解釈する」と言っており、あなたの場合の1人の子は「この子をCDATAブロックとして解釈する」と言っています。

于 2010-02-22T20:02:26.640 に答える
1

<>...</>とにかく単一のXMLアイテムとして処理されるため、子が1つだけのXMLListリテラル()を使用する理由はありません。ただ使ってみません<![CDATA[...]]>か?また、<![CDATA[...]]>XMLテキストノード(<![CDATA[]]>.nodeKind() === "text")を返すだけです。

これはすべてE4Xの一部であり、ActionScript3と両方のJavaScriptエンジンによって実装されます。

于 2010-02-22T23:50:45.613 に答える
1

Elijahが言ったように、Mozilla以外では機能しないのはE4X構文です。元のマークアップと同じオブジェクトの暗黙的toStringなメソッドに依存しているだけで、XMLに関係することには何も使用していないようです。XMLECMA-357(E4X仕様)は、XMLの正確な解析およびシリアル化ルールを指定していないため、たとえば、を保証するものではありません。<![CDATA[マーカーを削除します。Firefoxだけでもこれに依存しているIMOには疑問があります。

いずれにせよ、ブロック内で使用するためにコンテンツをエスケープする問題は実際には解決されませんscript...特に、</シーケンスはHTML4ではまだ無効であり、XHTMLではロット全体が無効であり、それでも心配する必要があります。シーケンス</script]]>コンテンツ内。したがって、実際にはそれほど多くのことは得られていません...せいぜい、他のすべてのブラウザのサポートを犠牲にして、外部スクリプトに複数行の文字列が含まれているだけです。本当に価値があるとは思いません。

于 2010-02-23T01:17:38.553 に答える