将方法附加到jquery插件

时间:2014-11-16 05:43:30

标签: javascript jquery jquery-plugins

我写这个插件,现在我想要这个插件的添加方法,比如这个

$。的CreateMessage()。removeMessage()

我该怎么做?

我的代码是

$(function () {

    $.extend({

        createtext: function (options) {

            var setting = {
                holder: "",
                text: "",
            }

            if (options != null) {
                $.extend(setting, options)
            }

            var $this = $(setting.holder)

            $this.find("div#CreatetextHolder").remove()


            $this.append("<div id='CreatetextHolder'><span></span><p class='Createtext'>" + setting.text + "</p></div>")

            $this.find("div#CreatetextHolder").fadeIn('slow')

        }

    })
})

谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

$(selector).createMessage().removeMessage()会要求您编写两个插件 - 一个用于&#39;创建&#39;另一个用于删除&#39;。

在一个插件中执行所有操作要好得多,您可以通过定位语法来实现...

$(selector).createMessage('remove');

然后问题是在插件代码中测试options,并相应地进行分支。

目前,您测试if (options != null),假设options是一个javascript普通对象,并且唯一的操作是initianisation。

但是根据我的建议允许$.createMessage('remove'),您需要执行更广泛的测试/分支,具体取决于实际传递的参数。

例如:

$(function () {
    $.extend({
        createtext: function ( method, options ) {
            var settings = {
                holder: "",
                text: ""
            };
            var methods = {
                'init': function(options) {
                    var _settings = $.extend({}, settings, options);//this leaves `settings` unaffected and available for reuse in future inits.
                    //initialize here
                },
                'remove': function() {
                    //uninitialize here
                }
            }

            // These tests allow `init' to be passed explicitly, 
            // or assumed if an options object is the only argument.
            // Otherwise, a method such as 'remove' may be passed, 
            // with or without further parameters.
            if ( methods[method] ) {
                return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
            } else if ( typeof method === 'object' || !method ) {
                return methods.init.apply( this, arguments );
            } else {
                $.error( 'Method ' + method + ' does not exist in jQuery.createtext');
            }
        }
    });
});