jQuery +客户端模板="语法错误,无法识别的表达式"

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)

  • 我最终使用trim()函数删除了前导换行符:$("#modal_template").html().trim(); (9认同)

Kev*_* C. 9

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)