mootools:$未定义

时间:2010-03-13 21:29:57

标签: javascript mootools

我有一个奇怪的错误,我不明白。我只是将我的代码从jQuery转移到Mootools,因为它比jQuery混乱更清晰。

现在我使用

$$('div.canvas')

在mootools我得到了正确的元素。

当我尝试

$(document).getElement('div.canvas')

它告诉我 $ 未定义。如何定义 $$ 以及 $ lambda 等所有辅助函数,但不能 $

1.1到1.2 有什么变化,文档还没有更新?

4 个答案:

答案 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