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