【问题标题】:Is there a way turn off jQuery noConflict mode in WordPress?有没有办法在 WordPress 中关闭 jQuery noConflict 模式?
【发布时间】:2013-07-15 06:54:25
【问题描述】:

有没有办法在 WordPress 中关闭 jQuery.noConflict?我不是说加载 jQuery 的替代版本或更改加载方法,即:

jQuery(document).ready(function( $ ) { ... });

(function($) { ... })( jQuery );

我的意思是有没有办法为与 WordPress 捆绑的 jQuery 版本关闭 noConflict 模式?

设置jQuery.noConflict(false) 是否可行?如果是这样,你会在哪里设置它?

【问题讨论】:

标签: jquery wordpress


【解决方案1】:

经过一番研究,这是我能给你的最佳答案:

$ = jQuery.noConflict(true);

要回答您的其他问题,不,您不能传入 false,该属性用于控制全局变量发生的情况。您可以在此处找到文档: http://api.jquery.com/jQuery.noConflict/

另请注意,您可以按照它的建议加载 2 个不同版本的 jQuery(但不推荐)。

【讨论】:

  • 你在哪里设置$ = jQuery.noConflict(true);
  • 你可以在 jquery noconflict 设置之后的任何时候设置这个代码,但它也必须在你的任何 $ 前缀代码之前。如果您的所有代码都在 1 个 js 文件中...只需将其放在顶部即可。
  • 我的特殊情况与$ = jQuery.noConflict(); 一起工作,如@Jackson 评论中的链接示例所示。
【解决方案2】:

如果您包含自己的 javascript 库或脚本,您可以将以下内容添加到最顶部:

 var $ = jQuery;

【讨论】:

    【解决方案3】:

    我找到了另一种使变量$ 全局可用的方法。只需将以下内容放入主题的 functions.php 或插件中:

    function so17687619_jquery_add_inline() {
        wp_add_inline_script( 'jquery-core', '$ = jQuery;' );
    }
    add_action( 'wp_enqueue_scripts', 'so17687619_jquery_add_inline' );
    

    这将在 jQuery 的脚本标记之后立即输出 $ = jQuery; 作为内联脚本。因此,包含在之后的任何脚本都可以将 jQuery 实例用作 $jQuery

    【讨论】:

      【解决方案4】:

      添加这个最终对我有用:

      var $ = jQuery.noConflict();
      

      你可以在head部分的header.php文件中添加这个:

      <script>var $ = jQuery.noConflict();</script>
      

      或者,如果您使用子主题,请将其添加到子主题目录中的 functions.php 中:

      function my_scripts_method() {
          wp_enqueue_script(
              'custom-script',
              get_stylesheet_directory_uri() . '/main.js',
              array( 'jquery' )
          );
      }
      add_action( 'wp_enqueue_scripts', 'my_scripts_method' );
      

      并在与functions.php相同的位置(在子主题目录中)创建一个main.js文件,并在该文件中添加:

      var $ = jQuery.noConflict();
      

      【讨论】:

        【解决方案5】:

        你最好写在functions.php

        函数 wp_deregister_script 用于删除已注册的脚本。

        function remove_default_jquery()
        {
          // if is not admin screen
          if (!is_admin()) {
        //this function
            wp_deregister_script('jquery');
        }
        
        
        //wp_enqueue_scripts is WordPress fook for JavaScript
        add_action('wp_enqueue_scripts', 'remove_default_jquery');
        
        

        在 WordPress 中使用 jQuery 时

        您可以像往常一样使用 jQuery

        <script type="text/javascript">
        
        //jQuery in WordPress
        jQuery(function($){
            $('.carousel').carousel();
            $('.count_num').counterUp({
            delay: 10,
            time: 1000
            });
        });
        </script>
        

        公开文件在这里

        https://developer.wordpress.org/reference/functions/wp_deregister_script/

        【讨论】:

          【解决方案6】:

          如果要关闭,请转到您的wp-includes/js/jquery/jquery.js 文件并从最后一行删除jQuery.noConflict()。或者按照您的建议,只需将布尔值设置为 false。

          或者你可以用从 jquery.com 下载的内容替换内容,trac 中正在进行激烈的辩论。

          【讨论】:

          • 我不想修改那个文件,因为它会被 WP 更新覆盖。感谢您提供指向 Trac 辩论的链接,我赞成将其删除,或者更好的是,将其设置为设置。
          • 嗯,是的,它会在更新时覆盖,但除此之外,因为 trac 中的辩论说没有其他方法可以阻止它。 matt 在下面为您提供的选项将放置在您的 js 文件中。但为此,您不妨只使用包装器。我在 sublime 中设置了一个简码选项卡以添加 (function($){}(jquery); 只需单击两次:D
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-09-27
          • 2016-01-04
          • 2015-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多