Evg*_*eny 59 javascript jquery mustache
我刚刚将jQuery从1.8.3更新到1.9,它突然崩溃了.
这是我的模板:
<script type="text/template" id="modal_template">
<div>hello</div>
</script>
Run Code Online (Sandbox Code Playgroud)
这就是我读它的方式:
modal_template_html = $("#modal_template").html();
Run Code Online (Sandbox Code Playgroud)
这是我如何将其转换为jQuery对象(我需要在其上使用jQuery方法):
template = $(modal_template_html);
Run Code Online (Sandbox Code Playgroud)
...和jQuery崩溃了!
错误:语法错误,无法识别的表达式:<div> hello </ div>
slice.call(docElem.childNodes,0)[0] .nodeType;
jquery-1.9.0.js(第3811行)
但是,如果我将模板声明为纯文本变量,它将再次开始工作:
var modal_template_html = '<div>hello</div>';
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我解决这个问题吗?
UPDATE:jQuery开发团队听取并改变在1.10一切恢复正常:
您可能会看到的最大变化是我们放宽了$()中HTML处理的标准,允许前导空格和换行符,就像我们在1.9版之前所做的那样
Evg*_*eny 121
原来用换行符开头的字符串(或者除了"<"之外的任何东西)在jQuery 1.9中不被认为是HTML字符串
http://stage.jquery.com/upgrade-guide/1.9/#jquery-htmlstring-versus-jquery-selectorstring
Cha*_*les 16
我想你的模板是以空格或制表符开头的.
您可以像这样使用jQuery:
$($.parseHtml(modal_template_html)[1]);
Run Code Online (Sandbox Code Playgroud)
或解析字符串以删除开头的空格:
$(modal_template_html.replace(/^[ \t]+/gm, ''));
Run Code Online (Sandbox Code Playgroud)
EugeneXa在评论中提及它,但它应该是一个答案:
var template = $("#modal_template").html().trim();
Run Code Online (Sandbox Code Playgroud)
这会从字符串的开头修剪出有问题的空白.我和Mustache一起使用它,就像这样:
var markup = Mustache.render(template, data);
$(markup).appendTo(container);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
119854 次 |
最近记录: |