我有一个奇怪的错误,我不明白。我只是将我的代码从jQuery转移到Mootools,因为它比jQuery混乱更清晰。
现在我使用
$$('div.canvas')
在mootools我得到了正确的元素。
当我尝试
时$(document).getElement('div.canvas')
它告诉我 $ 未定义。如何定义 $$ 以及 $ lambda 等所有辅助函数,但不能 $ ?
从 1.1到1.2 有什么变化,文档还没有更新?
答案 0 :(得分:2)
如果您在同一页面上同时使用这两个库,则必须使用JQuery's noConflict() function
<script type="text/javascript" src="other_lib.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$.noConflict();
jQuery(document).ready(function($) {
// Code that uses jQuery's $ can follow here.
});
// Code that uses other library's $ can follow here.
</script>
如果您仍然遇到问题,请尝试检查已包含的JQuery文件,以确保noConflict已发布任何插件/代码使用jQuery('div.canvas')
等代替$
$
{{1}} ()函数,不会运行JQuery代码。
答案 1 :(得分:2)
有人指出,当定义$时,mootools 1.2.3+不会接管它,它将恢复使用document.id。这在发布之前并不常见,所以它在很大程度上取决于您引用的版本。但它自1.11以来肯定有所改变,并且有记录,请阅读此处的公告http://mootools.net/blog/2009/06/22/the-dollar-safe-mode/
对于您的应用程序设计,这意味着,如果您的结构是......
加载jquery(不需要noconflict,无所谓)
加载mootools
......它可以如下工作:
$("#foo"); // jquery
document.id("foo"); // mootools
// or create a temporary scope for mootools things
(function($) {
$("foo"); // mootools
})(document.id);
mootools开发中的最佳/最近实践需要发布插件和代码以引用document.id或在这样的闭包内以确保兼容性。这实际上是正常的,因为在jquery中不同于$别名的jQuery单例,在mootools中$只是一个选择器,所以它的使用将远远不那么普及。因此,输入document.id(“选择器”)不会有那么大的阻力。
答案 2 :(得分:1)
您是否删除了htmls中对jQuery的所有引用?
答案 3 :(得分:1)
MooTools不会覆盖$
函数(如果已存在)。它在定义之前检查$
的空值。所以我怀疑$仍然潜伏在某个地方。
if (window.$ == null) Window.implement({
$: function(el, nc){
return document.id(el, nc, this.document);
}
});
包含jQuery并运行$.noConflict();
但在包含MooTools之前,您是否可以记录$
的内容并查看记录的内容?
include jquery
$.noConflict();
console.log($); // should return undefined
include mootools