Ich habe gerade jQuery von 1.8.3 auf 1.9 aktualisiert und es kam plötzlich zum Absturz.
Das ist meine Vorlage:
<script type="text/template" id="modal_template">
<div>hello</div>
</script>
So habe ich es gelesen:
modal_template_html = $("#modal_template").html();
So verwandle ich es in ein jQuery-Objekt (ich muss dazu jQuery-Methoden verwenden):
template = $(modal_template_html);
... und jQuery stürzt ab!
Fehler: Syntaxfehler, nicht erkannter Ausdruck: <div> Hallo </ div>
slice.call (docElem.childNodes, 0) [0] .nodeType;
jquery-1.9.0.js (Zeile 3811)
Wenn ich template jedoch als reine Textvariable deklariere, funktioniert es wieder:
var modal_template_html = '<div>hello</div>';
Kann mir jemand helfen, das herauszufinden?
UPDATE: Das Jquery-Team hat gehört und hat die Dinge in 1.10 wieder normalisiert:
Die größte Änderung, die Sie wahrscheinlich bemerken werden, ist, dass wir die Kriterien für die HTML-Verarbeitung in $ () gelockert haben und Leerzeichen und Zeilenumbrüche wie vor Version 1.9 zulassen
Stellt sich heraus, dass eine Zeichenfolge, die mit einer neuen Zeile beginnt (oder etwas anderes als "<"), in jQuery 1.9 keine HTML-Zeichenfolge ist
http://stage.jquery.com/upgrade-guide/1.9/#jquery-htmlstring-versus-jquery-selectorstring
Ich denke, Ihre Vorlage beginnt mit einem Leerzeichen oder einer Registerkarte.
Sie können jQuery so verwenden:
$($.parseHtml(modal_template_html)[1]);
oder analysieren Sie die Zeichenfolge, um Leerzeichen am Anfang zu entfernen:
$(modal_template_html.replace(/^[ \t]+/gm, ''));
EugeneXa hat es in einem Kommentar erwähnt, aber es verdient eine Antwort:
var template = $("#modal_template").html().trim();
Dadurch wird der beleidigende Leerraum vom Anfang der Zeichenfolge entfernt. Ich habe es mit Moustache benutzt:
var markup = Mustache.render(template, data);
$(markup).appendTo(container);
Sie können verwenden
var modal_template_html = $.trim($('#modal_template').html());
var template = $(modal_template_html);
Als offizielles Dokument: Ab 1.9 wird eine Zeichenfolge nur dann als HTML betrachtet, wenn sie mit einem Zeichen (<) beginnt. Das Migrate-Plugin kann verwendet werden, um das Verhalten vor 1.9 wiederherzustellen.
Wenn ein String als HTML bekannt ist, aber mit beliebigem Text beginnen kann, der kein HTML-Tag ist, übergeben Sie ihn an jQuery.parseHTML (), das ein Array von DOM-Knoten zurückgibt, die das Markup darstellen. Daraus kann eine jQuery-Sammlung erstellt werden, zum Beispiel: $($.parseHTML(htmlString))
. Dies wird als bewährte Methode betrachtet, wenn beispielsweise HTML-Vorlagen verarbeitet werden. Einfache Verwendungen von Literal-Strings wie $("<p>Testing</p>").appendTo("body")
sind von dieser Änderung nicht betroffen.
Ich hatte den gleichen Fehler:
"Syntaxfehler, unbekannter Ausdruck: //"
Es ist ein bekannter Fehler bei JQuery.
.__ Was ich getan habe ist:
Ich habe das "script" -Tag in "div" geändert.
und fügte diesen Code hinzu
und der Fehler ist weg ...
app.run(['$templateCache', function($templateCache) {
var url = "survey-input.html";
content = angular.element(document.getElementById(url)).html()
$templateCache.put(url, content);
}]);