2010-02-22 35 views
9

So entdeckte ich vor kurzem, dass ich <>...</> Tags in Javascript in Firefox verwenden konnte, das ist praktisch beim Definieren von Blöcken von HTML oder CSS.Javascript und `<> ...</>` Tags

Aber ich bin nicht genau sicher, was vor sich geht, und ich verstehe die Syntax, die ich verwende. Was genau liefert <>...</> zurück? Mir ist aufgefallen, dass die Flucht besser funktioniert, wenn ich den Inhalt in <![CDATA[...]]> beifüge, also was passiert dort? Ist das nur Firefox oder Cross-Browser?

Ich habe versucht, dies online nachschlagen, aber lief in das normale Google/Symbol Problem. Außerdem schienen die meisten Ergebnisse für google CDATA javascript nicht relevant.

+1

+1, gute Frage. Lassen Sie sich hier keine Cross-Browser-Kompatibilität bieten :-) Gut für eine Firefox-Erweiterung. –

+0

@Andy E - es sieht so aus, als wäre es im JavaScript 1.6-Standard, also sollte es in allem funktionieren, das das unterstützt. – rampion

+0

Es heißt ECMAScript für XML. Ich bin auch überrascht, das zu sehen, obwohl ich das schon oft gelesen habe. Hier ist Wikipedia-Info dazu (http://en.wikipedia.org/wiki/ECMAScript_for_XML) –

Antwort

4

Ich glaube, die leeren Tags sind nur eine Möglichkeit, ein Root-Element zu schreiben, so dass Sie etwas haben, um einen Blob von XML zu wickeln. Es heißt "Interpretiere die Kinder dieses Wurzelelements als XML" und das einzelne Kind in deinem Fall sagt "Interpretiere dieses Kind als CDATA-Block".

+0

Also kann ich zufälliges XML als Wert in Javascript schreiben? Das scheint merkwürdig. – rampion

+0

Überraschte mich auch, als ich es das erste Mal sah. Aber so funktioniert es in Flex/Actionscript, und ich denke nicht, dass es rein zufällig ist. Vorbehalt: Ich sagte "Ich glaube", weil ich das nicht definitiv sagen kann. – Robusto

+1

Sieht aus, als ob Sie Recht haben: ["E4X führt der JavaScript-Sprache ein natives XML-Objekt ein und fügt Syntax zum Einbetten literaler XML-Dokumente in JavaScript-Code hinzu."] (Https://developer.mozilla.org/De/E4X/ Processing_XML_with_E4X) – rampion

1

Es gibt keinen Grund, ein XMLList-Literal (<>...</>) mit nur einem Kind zu verwenden, da es ohnehin als einzelnes XML-Element behandelt wird. Warum nicht einfach <![CDATA[...]]> verwenden? Außerdem gibt <![CDATA[...]]> nur einen XML-Textknoten zurück (<![CDATA[]]>.nodeKind() === "text").

Dies ist alles Teil von E4X, die von ActionScript 3 und beiden JavaScript-Engines implementiert wird.

+1

Hmmm ... nur '' war ein Syntaxfehler in FF3.6 (nur einstecken in die Error Console). Ich bin mir nicht sicher, wie es in einem Greasemonkey-Skript bewertet würde, aber die Mozilla-Dokumentation (https://developer.mozilla.org/En/E4X/Processing_XML_with_E4X) besagt, dass Sie ein spezielles Attribut festlegen müssen, um von speziell in einem normalen Tag behandelt werden. – rampion

+1

Dies liegt daran, dass Sie JavaScript 1.5 und nicht 1.6 in der Fehlerkonsole auswerten. CDATA-Probleme treten nicht in einem Skript auf, da es kein Inline-HTML-Skript ist. Fügen Sie '' e4x = 1' 'am Ende des 'types' des Skripts hinzu. Oder noch besser: Verwenden Sie diese Shell, mit der Sie E4X verwenden können: http://code.eligrey.com/shell/shell.html –

1

Wie Elijah sagte, ist es die E4X-Syntax, die nirgends außer Mozilla funktioniert. Sie scheinen es nicht für irgendetwas mit XML zu verwenden, sondern verlassen sich nur auf die implizite toString-Methode des XML-Objekts, das mit dem ursprünglichen Markup identisch ist. ECMA-357 (die E4X-Spezifikation) spezifiziert nicht die genauen Parser- und Serialisierungsregeln für XML, also garantiert es zB nicht. um die <![CDATA[ Marker für Sie zu entfernen. IMO, die sich darauf sogar nur auf Firefox verlassen, ist fraglich.

In jedem Fall löst es nicht wirklich die Probleme der escaping Inhalt für den Einsatz in einem script Block ... insbesondere die </ Sequenz ist immer noch ungültig in HTML4, das ganze Los ist ungültig in XHTML, und Sie würden müssen sich noch um die Sequenzen </script und ]]> im Inhalt kümmern. Sie haben also nicht wirklich viel gewonnen ... im besten Fall haben Sie eine mehrzeilige Zeichenkette in externen Skripten, auf Kosten der Unterstützung für alle anderen Browser. Ich denke nicht, dass es das wirklich wert ist.

Verwandte Themen