如何使用方法创建 jQuery 插件? [英] How to create a jQuery plugin with methods?

查看:15
本文介绍了如何使用方法创建 jQuery 插件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试编写一个 jQuery 插件,该插件将为调用它的对象提供额外的功能/方法.我在网上阅读的所有教程(过去2小时一直在浏览)最多包括如何添加选项,而不是附加功能.

I'm trying to write a jQuery plugin that will provide additional functions/methods to the object that calls it. All the tutorials I read online (have been browsing for the past 2 hours) include, at the most, how to add options, but not additional functions.

这是我想做的事情:

//通过调用该div的插件将div格式化为消息容器

//format div to be a message container by calling the plugin for that div

$("#mydiv").messagePlugin();
$("#mydiv").messagePlugin().saySomething("hello");

或类似的东西.归结为:我调用插件,然后调用与该插件关联的函数.我似乎无法找到一种方法来做到这一点,而且我之前已经看到很多插件都这样做了.

or something along those lines. Here's what it boils down to: I call the plugin, then I call a function associated with that plugin. I can't seem to find a way to do this, and I've seen many plugins do it before.

这是我目前所拥有的插件:

Here's what I have so far for the plugin:

jQuery.fn.messagePlugin = function() {
  return this.each(function(){
    alert(this);
  });

  //i tried to do this, but it does not seem to work
  jQuery.fn.messagePlugin.saySomething = function(message){
    $(this).html(message);
  }
};

我怎样才能实现这样的目标?

How can I achieve something like that?

谢谢!

2013 年 11 月 18 日更新:我已将正确答案更改为 Hari 以下评论和点赞的答案.

Update Nov 18, 2013: I've changed the correct answer to that of Hari's following comments and upvotes.

推荐答案

根据 jQuery Plugin Authoring 页面 (http://docs.jquery.com/Plugins/Authoring),最好不要混淆 jQuery 和 jQuery.fn 命名空间.他们建议采用这种方法:

According to the jQuery Plugin Authoring page (http://docs.jquery.com/Plugins/Authoring), it's best not to muddy up the jQuery and jQuery.fn namespaces. They suggest this method:

(function( $ ){

    var methods = {
        init : function(options) {

        },
        show : function( ) {    },// IS
        hide : function( ) {  },// GOOD
        update : function( content ) {  }// !!!
    };

    $.fn.tooltip = function(methodOrOptions) {
        if ( methods[methodOrOptions] ) {
            return methods[ methodOrOptions ].apply( this, Array.prototype.slice.call( arguments, 1 ));
        } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) {
            // Default to "init"
            return methods.init.apply( this, arguments );
        } else {
            $.error( 'Method ' +  methodOrOptions + ' does not exist on jQuery.tooltip' );
        }    
    };


})( jQuery );

基本上,您将函数存储在数组中(范围为包装函数),如果传递的参数是字符串,则检查条目,如果参数是对象(或空).

Basically you store your functions in an array (scoped to the wrapping function) and check for an entry if the parameter passed is a string, reverting to a default method ("init" here) if the parameter is an object (or null).

然后你可以像这样调用方法......

Then you can call the methods like so...

$('div').tooltip(); // calls the init method
$('div').tooltip({  // calls the init method
  foo : 'bar'
});
$('div').tooltip('hide'); // calls the hide method
$('div').tooltip('update', 'This is the new tooltip content!'); // calls the update method

Javascript 的参数"变量是一个包含所有传递参数的数组,因此它适用于任意长度的函数参数.

Javascripts "arguments" variable is an array of all the arguments passed so it works with arbitrary lengths of function parameters.

这篇关于如何使用方法创建 jQuery 插件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆