编写jQuery插件的方法

声明:详细内容请看<<锋利的jquery>>这本书 这里没对自定义选择器作介绍 因为我感觉jQuery已经为我们定义足够的选择器已经满足使用 <!DOCTYPE html>
<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>编写jquery插件</title>

</head>
<style type="text/css">
    table        { border:0;border-collapse:collapse;}
    td    { font:normal 12px/17px Arial;padding:2px;width:100px;}
    th            { font:bold 12px/17px Arial;text-align:left;padding:4px;border-bottom:1px    solid #333;}
    .even        { background:#FFF38F;}  /* 偶数行样式*/
    .odd        { background:#FFFFEE;}  /* 奇数行样式*/
    .selected    { background:#FF6500;color:#fff;}
</style>
<script type="text/javascript" src="../js/jquery-3.1.1.min.js"></script>
    <script type="text/javascript">

    /*   一: jquery的插件主要分为三种类型
         1.封装对象方法的插件 这种方法是将对象方法封装起来,用于对通过选择器获取的jquery对象进行操作,是醉常见的操作
         2.封装全局函数的插件:可将独立的函数加到jquery命名空间之下
         3.选择器插件:选择器插件 用来扩充自己喜欢的选择器
      二:插件的基本要点:
         1.命名要点:jquery.[插件名].js; jquery.color.js 以免和其他javascript库插件混淆
         2.所有的对象方法应该附件到jquery.fn对象上,而所有的全局函数都应附件到jquery对象本身上
         3.在插件内部,this指向的是当前通过选择器获得jquery对象,而不像一般的方法那样,例如click()方法内部的this指向dom元素
         4.可以通过this.each()来遍历所有的元素
         5.所有的方法和函数插件,都应当以分号结尾,否则压缩的时候可能出现问题 .为了更稳妥,可以先在插件头部添加分号,以免其它人的不规范带来的yingx
         6.插件应该返回jquery对象,以免他人不规范代码给插件带来影响.
         7.避免在插件内部使用$作为Jquery对象的别名,而应使用完整的Jquery来表示 这样可以避免冲突 当然也可以利用闭包这种技巧回避这个问题 使用插件内部继续使用$作为Jquery的别名
     三:jquery插件机制:
         jquery提供了两个扩展Jquery的方法 :
         1.jquery.fn.extend()方法:用于扩展封装对象方法的插件
         2.jquery.extend()方法:用于扩展封装全局函数 和选择器插件的方法     */ 

    ;(function($){
        $.fn.extend({
            "alterBgColor":function(options){
                //插件代码
                //jQuery.extend()方法经常被设置插件的方法的一系列默认的参数 而且可以很方便地的传入参数覆盖默认值
                options=$.extend({
                //m默认的设置
                odd:"odd",
                even:"even",
                selected:"selected"
                },options);
          $("tbody>tr:odd",this).addClass(options.odd);
          $("tbody>tr:even",this).addClass(options.even);
          $("tbody>tr",this).click(function(){
              //判断是否被选中
              var hasSelected =$(this).hasClass(options.selected);
              $(this)[hasSelected ? "removeClass":"addClass"](options.selected)
              //查找内部的checkbox设置对应的属性
              .find(":checkbox").prop("checked",!hasSelected);
              //如果默认情况下选中则高亮
           });
           $("tbody>tr:has(:checked)",this).addClass(options.selected);
           return this;
          }
        });
    })(jQuery);
    //封装全局函数的插件
    ;(function($){
        $.extend({
            ltrim :function(text){
                //去掉左边的空格
                //(test || "")防止传进来的字符串变量处于未定义之类的特殊状态 如果test是undefined 则返回字符串""
                return(text || "").replace(/^\s+/g,"");
            },
            rtrim:function(text){
                //去掉右边的空格
                return(text || "").replace(/\s+$/g,"");
            }
        });
    })(jQuery);
    //应用该插件 可以链式操作
    $(function(){
        $("#table2").alterBgColor()
        .find("th").css("color","red");

        $("#trimTest").val (jQuery.rtrim("  text  "));

    });
    </script>
<body>

<table id="table1">
    <thead><tr><th> </th><th>姓名</th><th>性别</th><th>暂住地</th></tr></thead>
    <tbody>
        <tr>
            <td><input type="checkbox" name="choice" value=""/></td>
            <td>张山</td>
            <td>男</td>
            <td>浙江宁波</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="choice" value="" /></td>
                <td>李四</td>
            <td>女</td>
            <td>浙江杭州</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="choice" value="" checked="checked" /></td>
                    <td>王五</td>
            <td>男</td>
            <td>湖南长沙</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="choice" value="" /></td>
            <td>找六</td>
            <td>男</td>
            <td>浙江温州</td>
        </tr>
        <tr>
        <td><input type="checkbox" name="choice" value="" /></td>
                <td>Rain</td>
            <td>男</td>
            <td>浙江杭州</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="choice" value="" checked="checked" /></td>
            <td>MAXMAN</td>
            <td>女</td>
            <td>浙江杭州</td>
        </tr>
    </tbody>
</table>
<br /><br />
<table id="table2">
    <thead><tr><th> </th><th>姓名</th><th>性别</th><th>暂住地</th></tr></thead>
    <tbody>
        <tr>
            <td><input type="checkbox" name="choice" value=""/></td>
            <td>张山</td>
            <td>男</td>
            <td>浙江宁波</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="choice" value="" /></td>
                <td>李四</td>
            <td>女</td>
            <td>浙江杭州</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="choice" value="" checked="checked" /></td>
                    <td>王五</td>
            <td>男</td>
            <td>湖南长沙</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="choice" value="" /></td>
            <td>找六</td>
            <td>男</td>
            <td>浙江温州</td>
        </tr>
        <tr>
        <td><input type="checkbox" name="choice" value="" /></td>
                <td>Rain</td>
            <td>男</td>
            <td>浙江杭州</td>
        </tr>
        <tr>
            <td><input type="checkbox" name="choice" value="" checked="checked" /></td>
            <td>MAXMAN</td>
            <td>女</td>
            <td>浙江杭州</td>
        </tr>
    </tbody>
</table>
    <!-- 有些东西真的那么脆弱 -->
     <textarea id="trimTest" rows="5" cols="20"></textarea>

</body>
</html>
时间: 2024-08-26 19:16:17

编写jQuery插件的方法的相关文章

第七章(插件的使用和写法)(7.6 编写 jQuery 插件)

7.6.1 插件的种类 编写插件的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,方便后期维护和提高开发效率. jQuery 的插件主要分为3种类型. 1 封装对象方法的插件 这种插件是将对象方法封装起来,用于对通过选择器获取的 jQuery 对象进行操作,是最常见的一种插件. 据不完全统计,95%以上的 jQuery 插件都是封装对象方法的插件,此类插件可以发挥出 jQuery 选择器的强大优势.有相当一部分的 jQuery 的方法,都是在 jQuery 脚本库内部通过这种

编写jQuery插件

编写jQuery插件 在园子里有很多关于jQuery插件的文章,尤其 以下2篇文章: 不定义JQuery插件,不要说会JQuery jQuery插件开发精品教程,让你的jQuery提升一个台阶 这2位大神基础讲的很清楚,在这里就不多说了,主要那个小需求来练练: 需求说明:一个标题插件,可以通过后端取数,自定义标题,自定义样式 讨论:插件通常不都是加载一下就不操作了,比如表格插件,加载数据,刷新等等. 今天练习的控件就简单给大家理理写控件的思路,(有问题,有意见大家指出.) ; (function

自己编写jQuery插件 之 表单验证

吐个嘈先:最近状态不咋滴,真是什么都不想干,不想上班,做什么都没动力,觉得没意思.不想这样,不想这样,快让这种情绪消失吧,忽忽.... 表单验证在项目中用的还是比较多的,公司当前正在做的项目就要用到,故此写了此插件,先给大家看下在项目中应用的效果图吧: 直接上插件实现代码了,围绕代码进行讲解比较容易点: /* 描述:基于jquery的表单验证插件. 时间:2014-8-3 作者:similar([email protected]) */ (function ($) { $.fn.checkFor

编写jQuery插件(一)——插件约定及插件中的闭包

编写插件的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,提高开发效率和方便后期维护. 在编写jQuery插件的时候,我们一般会遵循一些约定: jQuery插件推荐命名为:jquery.插件名.js. 所有对象方法都应当附加到jQuery.fn对象上,而所有的全局函数都应当附加到jQuery对象本身上. 在插件内部,this指向的是当前通过选择器获取的jQuery对象:而一般的方法如click()方法,内部的this指向的是DOM元素. 所有的方法或函数插件,都应当以分号结尾

自己编写jQuery插件 之 菜单折叠

菜单折叠这个功能很简单,很多人都有写过,只因它在项目中使用实在是太频繁了.代码就那么几行,没什么讲的,这里只是将其封装成插件而已. Html代码如下: <div class="box"> <p>菜单一</p> <ul> <li><a>1111</a></li> <li><a>1111</a></li> <li><a>11

jQuery插件制作方法详解

jQuery插件制作方法详解 jquery插件给我的感觉清一色的清洁,简单.如Jtip,要使用它的功能,只需要在你的元素的class上加 上Jtip,并引入jtip.js及其样式即可以了.其他事情插件全包.我喜欢jquery的一个重要原因是发现她已经有了很多很好,很精彩的插件.写一 个自己的jQuery插件是非常容易的,如果你按照下面的原则来做,可以让其他人也容易地结合使用你的插件. jquery插件给我的感觉清一色的清洁,简单.如Jtip,要使用它的功能,只需要在你的元素的class上加上Jt

手动编写JQUERY插件

就拿一个简单的示例来说,鼠标点击输入框,提示文字消息,鼠标移开,再显示提示文字. <script type="text/javascript"> //编写插件 (function ($) { $.fn.placeholder = function (option) { var input = this; input.focus(function () { if (input.val() == "" || input.val() == option.Def

如何编写JQuery 插件详解

转载自:http://blog.sina.com.cn/s/blog_6154bf970101jam7.html 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jquery的插件机制,jquery有着成千上万的第 三方插件,有时我们写好了一个独立的功能,也想将其与jquery结合起来,可以用jquery链式调用,这就要扩展jquery,写成插件形式

如何编写jQuery插件

要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈. 学会使用jQuery并不难,因为它简单易学,并且相信你接触jQuery后肯定也使用或熟悉了不少其插件.如果要将能力上升一个台阶,编写一个属于自己的插件是个不错的选择. 本教程可能不是最精品的,但一定是最细致的. jQuery插件开发模式 软件开发过程中是需要一定的设计模式来指导开发的,有了模式,