jQuery +客户端模板=“语法错误,无法识别的expression式”

我只是从1.8.3更新jQuery 1.9,并突然开始崩溃。

这是我的模板:

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

我是这样读的:

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

这是我如何转换成jQuery对象(我需要使用jQuery方法):

 template = $(modal_template_html); 

…和jQuery崩溃!

错误:语法错误,无法识别的expression式:<div> hello </ div>

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

jquery-1.9.0.js(3811行)

但是,如果我将模板声明为纯文本variables,则会再次开始工作:

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

任何人都可以帮我解决这个问题吗?

更新 :在1.10中,jquery团队听到并改变了一切:

你可能看到的最大的变化是我们已经放宽了$()中HTML处理的标准,允许我们在1.9之前做的领先的空格和换行符

表明以换行符开头的string(或者除了“<”)以外的任何东西都不被认为是jQuery 1.9中的HTMLstring

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

我想你的模板是从一个空格或标签开始的。

你可以像这样使用jQuery:

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

或者parsingstring以删除开头的空格:

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

EugeneXa在评论中提到了这一点,但它应该成为一个答案:

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

这从string的开始修剪有问题的空白。 我用小胡子,就像这样:

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

您可以使用

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

作为官方文档:从1.9开始,如果string以小于(“<”)字符开头,则仅被视为HTML。 Migrate插件可以用来恢复1.9以前的行为。

如果一个string被认为是HTML,但是可以从不是HTML标签的任意文本开始,那么将它传递给jQuery.parseHTML(),它将返回一个代表标记的DOM节点数组。 可以从中创build一个jQuery集合,例如: $($.parseHTML(htmlString)) 。 例如,在处理HTML模板时,这将被视为最佳做法。 $("<p>Testing</p>").appendTo("body")等简单string的使用不受此更改的影响。

我有同样的错误:
“语法错误,无法识别的expression式://”
这是已知的JQuery的错误,所以我需要考虑解决方法,
我做的是:
我将“脚本”标签更改为“div”
并添加angular度这个代码
错误消失了

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