自定义构建jquery插件实验(2)

简介: //简单的 test.js ;(function($){ $.fn.getData=function(options){ return this.append(options); } })(jQuery); test.html <!DOCTYPE html><html><head><meta chars

//简单的

test.js

;(function($){
	
  $.fn.getData=function(options){
	  return this.append(options);
  }
	
	
})(jQuery);

test.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type='text/javascript' src='http://code.jquery.com/jquery-1.7.1.js'></script>
<script type='text/javascript' src='../js/test.js'></script>
<title>Insert title here</title>
<script type="text/javascript">
   $(function(){
	   $("span").getData("这是我第一个自定义插件");
   });
</script>
</head>
<body>
<span></span>
</body>
</html>


//来个复杂点的

test2.js

 (function($) {
    debugger;
    // 在我们插件容器内,创造一个公共变量来构建一个私有方法
    var privateFunction = function() {
        // code here
    }
 
    // 通过字面量创造一个对象,存储我们需要的共有方法
    var methods = {
        // 在字面量对象中定义每个单独的方法
        init: function() {
 
            // 为了更好的灵活性,对来自主函数,并进入每个方法中的选择器其中的每个单独的元素都执行代码
            return this.each(function() {
                // 为每个独立的元素创建一个jQuery对象
                var $this = $(this);
 
                // 执行代码
                // 例如: privateFunction();
            });
        },
        destroy: function() {
            // 对选择器每个元素都执行方法
            return this.each(function() {
                // 执行代码
            });
        }
    };
 
    $.fn.pluginName = function() {
        // 获取我们的方法,遗憾的是,如果我们用function(method){}来实现,这样会毁掉一切的
        var method = arguments[0];
 
        // 检验方法是否存在
        if(methods[method]) {
 
            // 如果方法存在,存储起来以便使用
            // 注意:我这样做是为了等下更方便地使用each()
            method = methods[method];
 
        // 如果方法不存在,检验对象是否为一个对象(JSON对象)或者method方法没有被传入
        } else if( typeof(method) == 'object' || !method ) {
 
            // 如果我们传入的是一个对象参数,或者根本没有参数,init方法会被调用
            method = methods.init;
        } else {
 
            // 如果方法不存在或者参数没传入,则报出错误。需要调用的方法没有被正确调用
            $.error( 'Method ' +  method + ' does not exist on jQuery.pluginName' );
            return this;
        }
 
        // 调用我们选中的方法
        // 再一次注意我们是如何将each()从这里转移到每个单独的方法上的
        return method.call(this);
 
    }
 
})(jQuery);


test2.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type='text/javascript' src='http://code.jquery.com/jquery-1.7.1.js'></script>
<script type='text/javascript' src='../js/test2.js'></script>
<title>Insert title here</title>
<script type="text/javascript">
   $(function(){
	  // $("span").getData("这是我第一个自定义插件");
	   
	   
	   /*
	   注意这些例子可以在目前的插件代码中正确运行,并不是所有的插件都使用同样的代码结构 
	  */
	  // 为每个类名为 ".className" 的元素执行init方法
	 // $('.className').pluginName();
	  $('.className').pluginName('init');
	  $('.className').pluginName('init', {}); // 向init方法传入“{}”对象作为函数参数
	 // $('.className').pluginName({}); // 向init方法传入“{}”对象作为函数参数
	   
	  // 为每个类名为 “.className” 的元素执行destroy方法
	 // $('.className').pluginName('destroy');
	 // $('.className').pluginName('destroy', {}); // 向destroy方法传入“{}”对象作为函数参数
	   
	  // 所有代码都可以正常运行
	 // $('.className').pluginName('init', 'argument1', 'argument2'); // 把 "argument 1" 和 "argument 2" 传入 "init"
	   
	  // 不正确的使用
	  //$('.className').pluginName('nonexistantMethod');
	 // $('.className').pluginName('nonexistantMethod', {});
	 // $('.className').pluginName('argument 1'); // 会尝试调用 "argument 1" 方法
	//  $('.className').pluginName('argument 1', 'argument 2'); // 会尝试调用 "argument 1" ,“argument 2”方法
	 // $('.className').pluginName('privateFunction'); // 'privateFunction' 不是一个方法
   });
</script>
</head>
<body>
<span class="className"></span>
</body>
</html>

特别注意第二个案例,如果你看完我之前的原理还不清楚的话,请源码调试,一步一步的看清jquery源码的设计模式。





目录
相关文章
|
7月前
|
开发框架 前端开发 JavaScript
使用JavaScript、jQuery和Bootstrap构建待办事项应用
使用JavaScript、jQuery和Bootstrap构建待办事项应用
121 0
|
2月前
|
JavaScript
jQuery 树型菜单插件(Treeview)
jQuery 树型菜单插件(Treeview)
65 2
|
18天前
|
JavaScript
jQuery实现弹窗消息提示特效插件
这是一个简单的jQuery弹窗消息提示插件,用于网站用户操作提示。包含默认、成功、失败、警告、提示弹窗等不同形式弹出的消息提示效果,轻量简单,欢迎下载!
25 4
|
6月前
|
设计模式 JavaScript 前端开发
必知的技术知识:jQuery插件开发精品教程,让你的jQuery提升一个台阶
必知的技术知识:jQuery插件开发精品教程,让你的jQuery提升一个台阶
67 1
|
2月前
|
JavaScript 前端开发
jQuery Growl 插件(消息提醒)
jQuery Growl 插件(消息提醒)
58 4
jQuery Growl 插件(消息提醒)
|
2月前
|
存储 JSON JavaScript
jQuery Cookie 插件
jQuery Cookie 插件
49 4
jQuery Cookie 插件
|
1月前
|
JavaScript 定位技术
jQuery鹰眼视图小地图定位预览插件minimap.js
这是一个jQuery小地图定位预览视图,默认左侧是页面主要内容,minimap.js的好处就是在它的右侧形成一个快速定位通道,产生一个缩小版的页面,即预览效果,可以点击并快速定位到页面的某个位置。简单实用,欢迎下载!
31 0
|
4月前
|
JavaScript 前端开发 数据安全/隐私保护
Validform jQuery插件详解
【8月更文挑战第21天】
100 0
|
6月前
|
JavaScript Perl PHP
一篇文章讲明白jQuery插件之jqueryeditableplugin
一篇文章讲明白jQuery插件之jqueryeditableplugin
36 0
|
7月前
|
JavaScript 数据可视化 前端开发
jQuery-JS插件-第9次课-使用插件让领导对你刮目相看-附案例作业
jQuery-JS插件-第9次课-使用插件让领导对你刮目相看-附案例作业
59 0