0

我正在尝试在 jQuery 选择器上创建一个可调用的函数。

这是我在我的页面上所做的:

<!DOCTYPE html>
<head>
  <meta charset="utf-8">
  <title>first</title>
  <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script type="text/javascript" src="../myplugin.js"></script>
</head>
<body>
  <div class="foo"></div>

  <script type="text/javascript">
    // my custom function 
    $(".foo").addGadget({ "src":"gadgets/menu.html", "param":{"filter":"office"}},
        function (error, response) {
          console.log("hello!!!");
        });
  </script>
</body>
</html>

所以我希望能够addGadget()$('foo'). 这可以正常工作:

(function (window, jquery, undefined) {
  var that = {};

  that.addGadget = $.fn.addGadget = function (options, callback) {
    console.log("I'd like to access my element here");
    console.log(this);
    console.log($(this));
  };

  return window.myPlugin = that;
}(window, $));

所以我可以同时调用

 myPlugin.addGadget();
 $('.foo').addGadget();

问题是,我无法访问foo我的方法。

问题:
我需要更改哪些内容才能访问foomyaddGadget方法?

谢谢!

4

3 回答 3

2

你可以尝试使用

that.addGadget = $.fn.addGadget = function (options, callback) {
    console.log($(this).selector);
};
于 2013-05-20T15:00:41.093 回答
2

.selector人们使用过的财产,但我不确定它是否得到官方支持。

无论哪种方式,它现在已被正式弃用。

.selector文档

.selector属性在 jQuery 1.7 中已弃用,仅在 jQuery 1.9 中维护到支持.live()jQuery Migrate 插件所需的范围内。在未来的版本中,它可能会被删除,恕不另行通知。该属性从来都不是选择器的可靠指示符,可用于获取当前包含在 jQuery 集中的元素集,其中它是一个属性,因为后续遍历方法可能已经更改了该集。需要使用选择器的插件应该让调用者在初始化期间将选择器作为插件参数的一部分传入。

于 2013-05-20T15:08:31.007 回答
0

正如@Dogbert 的评论中提到的

console.log(this);

应该返回调用函数的选择器。它确实...

于 2013-05-20T15:26:15.807 回答