JQuery + client-side template = "Erreur de syntaxe, expression non reconnue"

Je viens de mettre à jour jQuery de 1.8.3 à 1.9, et il a commencé à s'écraser tout à coup.

C'est mon modèle:

<script type="text/template" id="modal_template"> <div>hello</div> </script> 

Voici comment je l'ai lu:

 modal_template_html = $("#modal_template").html(); 

C'est ainsi que je le transforme en objet jQuery (j'ai besoin d'utiliser les méthodes jQuery)

 template = $(modal_template_html); 

… et jQuery se bloque!

Erreur: erreur de syntaxe, expression non reconnue: <div> bonjour </ div>

Slice.call (docElem.childNodes, 0) [0] .nodeType;

Jquery-1.9.0.js (ligne 3811)

Cependant, si je déclare le modèle comme une variable de texte brut, il recommence à fonctionner:

 var modal_template_html = '<div>hello</div>'; 

Quelqu'un peut-il m'aider à comprendre cela?

MISE À JOUR : l'équipe de Jquery a entendu et changé les choses à la normale en 1.10:

Le plus grand changement que vous verrez probablement, c'est que nous avons assoupli les critères de traitement HTML en $ (), permettant d'ouvrir les principaux espaces et les nouvelles lignes comme nous l'avions fait avant la version 1.9

Désactiver une chaîne commençant par une nouvelle ligne (ou autre chose que "<") n'est pas considéré comme une chaîne HTML dans jQuery 1.9

http://stage.jquery.com/upgrade-guide/1.9/#jquery-htmlstring-versus-jquery-selectorstring

Je suppose que votre modèle commence par un espace ou un onglet.

Vous pouvez utiliser jQuery comme ça:

 $($.parseHtml(modal_template_html)[1]); 

Ou analysez la chaîne pour supprimer les espaces du début:

 $(modal_template_html.replace(/^[ \t]+/gm, '')); 

EugeneXa l'a mentionné dans un commentaire, mais il mérite d'être une réponse:

 var template = $("#modal_template").html().trim(); 

Cela permet d'allonger l'espace blanc offensant depuis le début de la chaîne. Je l'ai utilisé avec Moustache, ainsi:

 var markup = Mustache.render(template, data); $(markup).appendTo(container); 

Vous pouvez utiliser

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

En tant que document officiel: À partir de 1.9, une chaîne est seulement considérée comme HTML si elle commence par un caractère inférieur à celui ("<"). Le plugin Migrate peut être utilisé pour restaurer le comportement avant 1.9.

Si une chaîne est connue pour être HTML, mais peut commencer par un texte arbitraire qui n'est pas une balise HTML, passez-le à jQuery.parseHTML () qui renverra un tableau de noeuds DOM représentant le balisage. Une collection jQuery peut être créée à partir de ceci, par exemple: $($.parseHTML(htmlString)) . Cela serait considéré comme la meilleure pratique lors du traitement de modèles HTML, par exemple. Utilisations simples de chaînes littérales telles que $("<p>Testing</p>").appendTo("body") sont pas affectés par cette modification.

J'ai eu la même erreur:
"Erreur de syntaxe, expression non reconnue: //"
Il est connu de bogue à JQuery, alors j'ai dû penser à la solution de contournement,
Ce que j'ai fait c'est:
J'ai changé la balise "script" en "div"
Et ajouté à angular ce code
Et l'erreur est disparue …

 app.run(['$templateCache', function($templateCache) { var url = "survey-input.html"; content = angular.element(document.getElementById(url)).html() $templateCache.put(url, content); }]);