ui.abc.open = function(e){
                            console.log(ui.attr('id'),options.url);
                        };你这样是给abc函数增加静态方法,然后没执行一次abc后就会导致静态方法中的ui引用的是最后一次执行abc的对象插件的方法一般是这样来搞吧。。<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.2.min.js"></script>
<script>
    (function ($) {
        $.fn.extend({
            abc: function (method) {
                return this.each(function () {
                    if (typeof method == 'string') {//调用方法。。
                        console.log($(this).attr('id') + '|' + $(this).data('config').url);
                        return this;
                    }
                    else $(this).data('config', method);
                });
            }
        });
    })(window.jQuery);
    $(function () {
        $('#a1').abc({ url: 'aaa' });
        $('#a1').abc('open');
        $('#a2').abc({ url: 'bbb' })
        $('#a2').abc('open');
        $('#a1').abc('open');
    });
</script>
<body>
<div id="a1"></div><div id="a2"></div>
</body>

解决方案 »

  1.   

    easyui是这样    (function ($) {
            $.fn.abc = function (method, params) {
                if (typeof method == 'string') {
                    if ($.fn.abc.methods[method]) return $.fn.abc.methods[method](this, params)
                    return this;
                }
                return this.each(function () {                $(this).data('config', method);
                });
            };
            $.fn.abc.methods = {
                open: function (jq, params) {
                    console.log(jq.attr('id') + '|' + jq.data('config').url);
                }
            };    })(window.jQuery);
      

  2.   

    我也在找资料呢但是像您上面的写法,插件的其他方法只可以支持:$(xxx).abc(方法名称,方法参数) 这一种调用方式;而没办法支持:
    $(xxx).abc.方法名称(方法参数) 这种方式来调用,但是我看过有插件支持这两种方式的,不知道怎么实现的
      

  3.   

    那你看他的代码就好了
    就算支持也应该是$('#a2').abc().open();,然后abc返回一个实例对象,用了prototype什么的
      

  4.   

    我以前用的easy ui的插件datagrid$("#id").datagrid({
        url : "XXX",
        //还有好多属性忘了,反正格式是这样,你可以去搜一个easyui的api,很简单。
    });