Javascript 编写jQuery插件:公共方法和多个插件实例

Javascript 编写jQuery插件:公共方法和多个插件实例,javascript,jquery,Javascript,Jquery,我已经花了几个小时写jQuery插件,阅读文档,搜索帖子等等。有一件事还不清楚。 我正在编写一个包含多个实例的插件,所以我有这样的东西 <div id="box1" class="box"></div> <div id="box2" class="box"></div> <script type="text/javascript"> $(".box").myPlugin(); </script> 现在我需要这个插

我已经花了几个小时写jQuery插件,阅读文档,搜索帖子等等。有一件事还不清楚。 我正在编写一个包含多个实例的插件,所以我有这样的东西

<div id="box1" class="box"></div>
<div id="box2" class="box"></div>

<script type="text/javascript">
    $(".box").myPlugin();
</script>
现在我需要这个插件来公开一个公共方法来读/写这样的私有变量。当然,上面的代码将失败并出现“myValue未定义”错误

在某种程度上,我需要获取对任何实例的引用,然后调用“他们的”公共方法。差不多

$('#box2')。showValue()/**/


任何帮助都将不胜感激。谢谢。

不幸的是,如果不在
$.fn命名空间上简单地定义额外的“插件”,就很难让示例正常工作

通常,插件的方法可以作为传递给插件的参数来实现:

$("foo").myPlugin(); // initialize
$("foo").myPlugin("doSomething"); // do something
或者通过提供“实例”对象:

$("foo").myPlugin(); // initialize
var inst = $("foo").data("myPlugin"); // get instance
inst.doSomething(); // do something

第一个选项的示例可以在这里找到:

看看:我的示例是(function($){$.fn.myPlugin=function(action){this.each(function(action){/*这是一个私有变量*/var myValue=Math.floor(Math.random()*10000);如果(action=='show'){alert('My value is'+myValue);}}});返回这个;};};}(jQuery));但是这是正确的吗?插件代码不是调用了4次(每个框两次)而不是2次吗?这是正确的,您需要在编写插件时牢记这一事实。
$("foo").myPlugin(); // initialize
var inst = $("foo").data("myPlugin"); // get instance
inst.doSomething(); // do something