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

//简单的

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源码的设计模式。

时间: 2024-12-28 12:30:16

自定义构建jquery插件实验(2)的相关文章

使用jQuery UI和jQuery插件构建更好的Web应用程序

本文同时也介绍了一些 jQuery 插件,可以加速 Web 开发并有助于创建我们所熟悉的,且流畅.直观.灵活的界面. 如果您是一个传统桌面应用程序开发人员,并且正在转向开发 Web 应用程序,在学习 HTML 和 CSS 方面您可能不会遇到什么困难,但为应用程序设计一个漂亮的外观可能会是一个挑战.jQuery UI 和各种 jQuery 插件对于快速将 Web 应用程序组合在一起有极大的帮助,只需在 GUI 设计上花费少量的时间. JavaScript 和 jQuery 如果您希望页面有任何形式

自定义jQuery插件方式实现强制对象重绘的方法

 这篇文章主要介绍了自定义jQuery插件方式实现强制对象重绘的方法,实例分析了jQuery插件及对象重绘的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了自定义jQuery插件方式实现强制对象重绘的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 jQuery.fn.redraw = function(){ jQuery(this).each(function(){ this.style.display='none'; this.off

jQuery插件Validate实现自定义校验结果样式_jquery

本文实例介绍了jQuery插件Validate实现自定义校验结果样式的详细代码,分享给大家供大家参考,具体内容如下 效果如下: 具体步骤: 1.引入依赖包 <script src="../../scripts/jquery-1.3.1.js" type="text/javascript"></script> <script src="lib/jquery.validate.js" type="text/ja

jQuery实现的一个自定义Placeholder属性插件_jquery

HTML5中文本框的新属性placeholder是个非常好用的属性,但是IE系列直至IE9都不支持这一属性,这就让大家在用这一属性的时候有些犹豫不决.自己曾经写过很多类似共的小控件,但是都不是很通用,这里分享一个渐进增强的自定义placeholder的jQuery插件.有点是使用简单,大家也可以根据自己的需要进行改进.平常写jQuery插件比较少,考虑到用jQuery的同学比较多,这里就用jQuery插件的形式编写了. 在这里简单的介绍一下实现思路. 1.表现与html5原生的placehold

自定义刻度jQuery进度条及插件_jquery

简要教程 progressdots是一款可自定义刻度动画的jQuery进度条插件.通过该jQuery进度条插件你可以自定义进度条刻度圆点的数量,大小,颜色等属性,并且可以通过CSS来控制圆点的外观样式. 请看下面效果图了解相关插件. 使用该jQuery进度条插件需要引入jquery,jquery.progressdots.js和jquery.progressdots.css文件. <script src="jquery.min.js"></script> <

自定义jQuery插件方式实现强制对象重绘的方法_jquery

本文实例讲述了自定义jQuery插件方式实现强制对象重绘的方法.分享给大家供大家参考.具体实现方法如下: jQuery.fn.redraw = function(){ jQuery(this).each(function(){ this.style.display='none'; this.offsetHeight; // no need to store this anywhere, the reference is enough this.style.display='block'; });

jquery自定义插件 让你再牛B的说我会jQuery插件

一:导言   有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写$("#"),$("."),写了几年就对别人说非常熟悉JQuery.我曾经也是这样的人,直到有一次公司里的技术交流,我才改变了自己对自己的看法. 二:普及JQuery知识 知识1:用JQuery写插件时,最核心的方法有如下两个:  代码如下 复制代码 $.extend(object) 可以理解为JQuery 添加一个静态方法. $.fn.extend(object) 可以理解为JQuery

jQuery插件实现-自定义Placeholder

在这里简单的介绍一下实现思路. 1.表现与html5原生的placeholder尽量类似 2.渐进增强对于支持placeholder的浏览器不做处理 1.首先是几个工具方法: ■supportProperty(nodeType, property),获取浏览器是否支持某一控件的某一属性 ■getPositionInDoc(target, parent),获取对象在文档中的位置 ■$c,一个快速创建Dom对象的方法 这几个工具方法都是一些比较常见通用的方法,如果你有自己的或者更合适的可以自行替换.

30款超实用的JQUERY插件大合集

  互联网是一个神奇的东西,你在这里碰到臭味相投的朋友,发现世界各个角落的趣闻.最有意思的是,总有人能想到一些新奇古怪好玩有趣的点子,分享给整个世界,让我们的工作更轻松,让我们的生活更有意思.实际上jQuery就是这样诞生的,然后世界范围内许多著名的开发者开始制作出更多实用而好用的jQuery插件,它们不仅可以自由使用,而且保持着轻量级的状态,不会对服务器产生太大的压力. jQuery 的存在让网页设计和开发变得更加简单快捷,用好它确实能事半功倍.在大概半年前我们曾经整理过一波jQuery插件: