由于使用$ .noConflict,Jquery脚本无法正常工作

时间:2013-02-23 18:57:41

标签: jquery

我有2个JS文件,名为“scripts1”,包含幻灯片和“活动链接类”的脚本,另有一个“script2”包含“Mootools gallery”脚本。
第一个问题是使用
解决了jquery和Mootools库之间的冲突 “script1”中的“jQuery.noConflict()” 但在那之后,“活动链接类”的脚本停止工作,如果我从“script1”中移除“jQuery.noConflict()”[那么Mootools库将无法工作],该工作效果很好。 我猜想必须有一些关于$ sign或其他东西的逻辑问题。如果是这样,PLZ解释背后的逻辑 顺便说一句,我甚至经历了以下解决方案,但没有结果!

  1. Jquery And Mootools, .noConflict is failing
  2. Jquery-Mootools conflict
  3. http://www.phil-taylor.com/2007/01/31/using-mootools-and-jquery-without-conflict/#.USjun6XI2ky
  4. 无论如何,我会把下面的代码放在一边,希望你能告诉我哪里出错了。
    文件“script1.js”包含以下代码:

    jQuery(document).ready(function ()      // the slideshow function
    {
         jQuery('#SlidesUl').fadeSlideShow();
    });
    
    $(function ()                           // the active link codes
    {
        var url = window.location.pathname,
        urlRegExp = new RegExp(url.replace(/\/$/, '') + "$");  
        $('#Menu div span #Menu1st a').each(function () 
        {
           if (urlRegExp.test(this.href.replace(/\/$/, '')))
           {
            $(this).addClass('active1st');
           }
        });
    });
    
    jQuery.noConflict();
    
    (function($)                           // the slideshow options and all
    {
    the codes
    })(jQuery);                                                                    
    

    文件“script2.js”包含以下内容:

    jQuery(document).ready(function ($)    // the Mootools gallery codes
    {
        the codes
    });                                                             
    

    以下是我如何放置库和文件:

    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.4.min.js" type="text/javascript"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
    <script src="js/script1.js" type="text/javascript"></script>
    <script src=" MooTools 1.4.4 " type="text/javascript"></script>
    <script src="js/script2.js" type="text/javascript"></script>                       
    

    非常感谢任何帮助或解释:)

2 个答案:

答案 0 :(得分:1)

the active link class中的代码在您调用jQuery.noConflict();后执行(它在文档加载时执行),因此您不能再使用$来引用jQuery了。要将此更改$更正为jQuery或将$设置为ready函数的参数,该函数实际上是jQuery对象。

1

$(function ()                           // the active link codes
{
    var url = window.location.pathname,
    urlRegExp = new RegExp(url.replace(/\/$/, '') + "$");  
    jQuery('#Menu div span #Menu1st a').each(function () 
    {
       if (urlRegExp.test(this.href.replace(/\/$/, '')))
       {
        jQuery(this).addClass('active1st');
       }
    });
});

2

$(function ($)                           // the active link codes
{
    var url = window.location.pathname,
    urlRegExp = new RegExp(url.replace(/\/$/, '') + "$");  
    $('#Menu div span #Menu1st a').each(function () 
    {
       if (urlRegExp.test(this.href.replace(/\/$/, '')))
       {
        $(this).addClass('active1st');
       }
    });
});

答案 1 :(得分:0)

调用$.noConflict()后jQuery无法工作的原因是$.noConflict()将使jQuery中默认使用的$符号无效。

我建议将代码包装在匿名函数中。

// Null the $ symbol used by jQuery.
$.noConflict();

// anonymous function.
(function($) {
    $(function() {
       alert('DOM ready!'); 
    });
})(jQuery);

http://jsfiddle.net/3v4CB/

修改

试试这个:

// script1.js
(function($) {

    $(function ()  
    {
        $('#SlidesUl').fadeSlideShow(); // the slideshow function

        // the active link codes
        var url = window.location.pathname,
        urlRegExp = new RegExp(url.replace(/\/$/, '') + "$");  
        $('#Menu div span #Menu1st a').each(function () 
            {
                if (urlRegExp.test(this.href.replace(/\/$/, '')))
            {
                $(this).addClass('active1st');
            }
        });

        // The codes
    });

})(jQuery);

// script2.js
(function($) {

    $(function ()  
    {
        // the Mootools gallery codes
    });

})(jQuery);