如何让jQuery插件同时处理多个元素?

Stu*_*rts 6 javascript jquery jquery-plugins

我做了一个组合框插件.要使用它,你只需要打电话

$(elem).combobox(compensateElement);
Run Code Online (Sandbox Code Playgroud)

编辑:问题是,如果你这样做

$('#1').combobox('form');
$('#2').combobox('form');
Run Code Online (Sandbox Code Playgroud)

该插件将破解...

elem是要转换为组合框的选项,而compensationElement是一个元素,在该元素之后插件可以插入一个div,它是suggestDiv-20px high的长度.(我的页面上有一个页脚,没有被绝对定位元素推下......)

现在,问题是这个插件只能在一个元素上使用!如何更改它以便它可以同时处理多个元素?这是超过一百行的JS代码,所以我不指望"转换"代码!

我曾想过将所有特定于元素的变量放入this.data"对象"中,但它根本不是一个好的解决方案.运行一些RegEx查找并替换它并配置它几个小时后,我根本没有让它工作......

我可以使用哪些技术?

非常感谢您的宝贵时间!

Sér*_*els 11

问题是你有一个文字对象,每次调用时都会替换他的内容m.init().

我建议你看一下这篇文章,它解释了编写JQuery插件的好方法.如果您看到"轻量级开始",例如:

$.fn[pluginName] = function ( options ) {
        return this.each(function () {
            if (!$.data(this, 'plugin_' + pluginName)) {
                $.data(this, 'plugin_' + pluginName,
                new Plugin( this, options ));
            }
        });   
    }
Run Code Online (Sandbox Code Playgroud)

这为每个元素创建了一个插件对象的新实例,因此您可以一致地维护状态.