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