0

我为 wordpress 创建了一个主题,我需要使用一些 jQuery。我在网上找到了一些代码,我自己做了一些。但是,当使用 wordpress 提供的 jQuery 时,它处于 noConflict 模式,而不是使用 $,它被设置为“jQuery”。这很好,但我不想修改我的所有代码和我在网上找到的任何代码来使用“jQuery”而不是 $。

所以它告诉我,通过放置function ($)在末尾,您可以使用 $ 作为 jQuery 别名,但只能在该函数范围内。这很好,但我希望它能够工作并传递给我从该范围内调用的函数。这就是我的问题所在。如何使在我的“resizeandcenter”函数中使用 $ 的 jQuery 代码工作。

jQuery('.artworklist > li > a > img').load(function ($){
   resizeitems('artworklist');
});

这是我希望能够使用 $ 内部的函数,因为我不想修改我的所有代码 / 以及我在网上找到的任何代码。

function resizeitems(elementname){
    //Do some jquery stuff using $
}

也许有另一种方法可以做我正在做的事情,或者我做错了?

编辑:

我的函数“resizeitems”在我的页眉中包含的一个 js 文件中独立存在。

另一个代码,我的第一个代码块中的 jQuery 代码位于页面底部的脚本块中。

所以我对包装我的功能的答案有点不确定?

4

3 回答 3

1

您可以像这样将整个代码包装在自执行闭包(或就绪/加载闭包)中

(function ($) {
    // do your stuff here
}(jQuery));

然后您可以在该闭包中使用 $

这是一个关于jsfiddle的示例

window.addEventListener("load", function () {
    (function ($jq) {
        $jq("body").append($jq("<div>").text("hello"));
    }(jQuery));
}, false);

这是一个使用 jquery 的就绪事件监听器的例子

jQuery(document).ready(function() {
    (function ($jq) {
        $jq("body").append($jq("<div>").text("hello"));
    }(jQuery));
});

jsfiddle 上

或者如@Mathletics所建议的,jquery 中的另一种选择,主要是语法更改

jQuery(function($jq) {
      $jq("body").append($jq("<div>").text("hello"));
});

jsfiddle 上

于 2013-05-10T17:18:16.097 回答
0

重要的是这里的范围。如果您的其他函数在其他范围内,您可以在该范围内将全局 jQuery 重新映射到 $,这样您就不必更改代码。

var $ = jQuery;

您甚至可以在全局范围内设置它,但如果 $ 用于其他用途,您可能会影响页面上的其他用途:

window.$ = jQuery;
于 2013-05-10T17:18:15.887 回答
0

您需要将 jQuery 传递到包含您的代码的顶级闭包中。通常这是在$(document).ready()通话中。一个基本示例如下所示:

jQuery(function($) {
      function resizeitems(elementname){
          //Do some jquery stuff using $
      }
      $('.artworklist > li > a > img').load(function (){
          resizeitems('artworklist');
      });
});

jQuery现在别名到$该闭包的内部。

于 2013-05-10T17:17:48.650 回答