【发布时间】:2013-01-15 21:53:22
【问题描述】:
我刚刚将 jQuery 从 1.8.3 更新到 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 崩溃了!
错误:语法错误,无法识别的表达式:
slice.call(docElem.childNodes, 0)[0].nodeType;
jquery-1.9.0.js(第 3811 行)
但是,如果我将模板声明为纯文本变量,它会再次开始工作:
var modal_template_html = '<div>hello</div>';
谁能帮我解决这个问题?
更新: Jquery 团队听说和changed 在 1.10 中恢复正常:
您可能会看到的最大变化是我们放宽了 $() 中处理 HTML 的标准,允许使用前导空格和换行符,就像我们在 1.9 版之前所做的那样
【问题讨论】:
-
您在使用迁移插件吗?它的消息可以帮助您找到在新版本的 jquery 中不起作用的部分代码。
-
可以,但没有显示任何警告。
-
在您分配
modal_template_html时,它是否已经被渲染(或至少放置在 DOM 中)?如果是这样,有什么阻止您直接使用 jQuery 访问它,而不是通过本机getElementById? -
抱歉,我删除并重新添加了您的 Mustache 标签,但我非常怀疑您为什么说那是您的“Mustache 模板”,然后只使用香草 jQuery 来访问它。 @EugeneXa 关于较新的 jQuery 不支持字符串开头的非
<字符的答案是正确的,所以实际上问题可能是您应该改用 Mustache 来呈现模板?即使你没有 Mustache 标签,它也会清理 HTML 和空格并返回 jQuery 可以使用的东西。 -
你是对的,理想情况下我应该立即使用 Mustache 来处理字符串,但是在模板中我可能需要更改的东西很少(比如更改 Mustache 变量的名称)关于 3rd-party API 发送给我的数据,这就是为什么我将其转换为 jQuery 对象,对其进行一些操作,然后再转换回字符串。
标签: javascript jquery mustache