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 问题。另外,google CDATA javascript的大多数结果似乎并不相关。

4

3 回答 3

4

我相信空标签只是编写根元素的一种方式,以便您可以在其中包装 XML 的 blob。它说“将此根元素的子元素解释为 XML”,而您的情况下的单个子元素是“将这个子元素解释为 CDATA 块”。

于 2010-02-22T20:02:26.640 回答
1

没有理由使用<>...</>只有一个孩子的 XMLList 文字 ( ),因为无论如何它都是作为单个 XML 项处理的。为什么不使用 just <![CDATA[...]]>?此外,<![CDATA[...]]>只返回一个 XML 文本节点 ( <![CDATA[]]>.nodeKind() === "text")。

这都是E4X的一部分,由 ActionScript 3 和两个 JavaScript 引擎实现。

于 2010-02-22T23:50:45.613 回答
1

正如以利亚所说,它是 E4X 语法,除了 Mozilla 之外在任何地方都无法使用。您似乎没有将它用于与 XML 相关的任何事情,只是依赖于与原始标记相同toString的对象的隐式方法。XMLECMA-357(E4X 规范)没有为 XML 指定确切的解析和序列化规则,因此它不能保证例如。为您删除<![CDATA[标记。IMO 甚至仅在 Firefox 上依赖这一点也是值得怀疑的。

无论如何,它并没有真正解决转义内容以在script块内使用的问题......特别是,</序列在 HTML4 中仍然无效,在 XHTML 中全部无效,您仍然需要担心序列</script]]>内容。因此,您并没有真正获得很多……充其量,您在外部脚本中获得了一个多行字符串,但代价是对所有其他浏览器的支持。我不认为这真的值得。

于 2010-02-23T01:17:38.553 回答