-1

我想知道如何对第三方插件进行附加费。例如,我想加载 select2() 插件,仅适用于非触摸浏览器。

(function( $ ){

    $.fn.mySelect2 = function(options) {
        var $container = $(this);
        var DEFAULTS = {};
        var options = $.extend(DEFAULTS, options);

        return this.each(function(){
            // only loads the select2 plugin on non touch browsers
            if(typeof(window.ontouchstart) != 'undefined') {
                $('.select2').select2(options);
            }
        });
    }
})( jQuery );

希望能够写出以下内容:

$('.select2').mySelect2()                    // inits the plugin
$('.select2').mySelect2('destroy')           // destroys the plugin
$('.select2').mySelect2({width: '220px'});   // inits the plugin with a rewritted option

前几行适用于初始化和编辑选项,但不适用于方法('destroy'、'readonly'、...)。

事实是我想对其他几个插件/库做同样的事情,我不知道第三方插件的每个方法或属性。

我怎样才能做到这一点 ?

4

1 回答 1

1

我认为问题在于,当您使用$.extend(DEFAULTS, options)while 选项是一个字符串时,您实际上将此字符串转换为一个对象(给定字符串的字符数组)。

因此,您应该检查选项变量的类型,并仅当它不是字符串时才使用默认值对其进行扩展。

此外,为了能够将此插件不仅用于'.select2',您可能应该将其替换为$(this)

$.fn.mySelect2 = function(options) {
    var $container = $(this);
    var DEFAULTS = {};
    if (typeof options != "string")
     options = $.extend(DEFAULTS, options);

    return this.each(function(){
        // only loads the select2 plugin on non touch browsers
        if(typeof(window.ontouchstart) != 'undefined') {
            $(this).select2(options);
        }
    });
}
于 2013-05-27T13:48:22.353 回答