Теги Javascript и `<> ... </>` - PullRequest
       9

Теги Javascript и `<> ... </>`

9 голосов
/ 22 февраля 2010

Итак, я недавно обнаружил, что могу использовать теги <>...</> в javascript в Firefox, что удобно при определении блоков 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 не выглядят актуальными.

Ответы [ 3 ]

4 голосов
/ 22 февраля 2010

Я считаю, что пустые теги - это просто способ написания корневого элемента, чтобы у вас было что-то, что можно обернуть большим количеством XML. Он говорит «интерпретировать дочерние элементы этого корневого элемента как XML», а единственный дочерний элемент в вашем случае говорит «интерпретировать этот дочерний элемент как блок CDATA».

1 голос
/ 23 февраля 2010

Как сказал Илия, это синтаксис E4X, который не будет работать нигде, кроме Mozilla. Похоже, вы не используете его для каких-либо действий с XML, просто полагаетесь на то, что неявный метод toString объекта XML совпадает с исходной разметкой. ECMA-357 (спецификация E4X) не определяет точные правила синтаксического анализа и сериализации для XML, поэтому не гарантирует, например. удалить маркеры <![CDATA[ для вас. ИМО полагаться на это даже на Firefox сомнительно.

В любом случае это на самом деле не решает проблемы экранирования контента для использования внутри блока script ... в частности, последовательность </ все еще недопустима в HTML4, вся партия недопустима в XHTML, и вам все равно придется беспокоиться о последовательностях </script и ]]> в содержимом. Так что вы на самом деле не многого добились ... в лучшем случае вы получили многострочную строку во внешних скриптах за счет поддержки всех других браузеров. Я не думаю, что это действительно того стоит.

1 голос
/ 23 февраля 2010

Нет смысла использовать литерал XMLList (<>...</>) только с одним дочерним элементом, так как он в любом случае обрабатывается как один элемент XML. Почему бы не использовать только <![CDATA[...]]>? Кроме того, <![CDATA[...]]> просто возвращает текстовый узел XML (<![CDATA[]]>.nodeKind() === "text").

Это все часть E4X , которая реализована в ActionScript 3 и обоих механизмах JavaScript.

...