webentwicklung-frage-antwort-db.com.de

jQuery + clientseitige Vorlage = "Syntaxfehler, nicht erkannter Ausdruck"

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

57
Evgeny

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

121
Evgeny

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, ''));
16
Charles

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);
8
Kevin C.

Sie können verwenden 

var modal_template_html = $.trim($('#modal_template').html());
var template = $(modal_template_html);
4
Eran H.

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.

1
voya

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);
}]);
0
Rivki Aizen