• 编写第一个jQuery插件


      示例插件:打算选用一个动态生成的无序列表,让列表的前10项可见,剩下的项处于隐藏状态,使用一个简单的显示/隐藏导航控制隐藏项是否可见。

    1,插件的结构

      插件的基本结构,所有的Jquery插件都声明为jQuery.fn对象的方法:

     jQuery.fn.showhidePlugin = function(){
    
      //插件相关代码
    
         }

    我们使用如下代码使用这个插件:

    $('.selector').showhidePlugin();

    为了和已有插件保持一致,我建议在保存插件时采用jQuery.pluginname.js这种命名格式。

    注意:我没有使用$别名,而是实用jQuery以避免任何可能的命名冲突。如果更喜欢实用$而不是Jquery ,可以像下面这样把插件代码封装在一个自执行的匿名函数中,就能够安全地在插件内使用$别名,不会引起任何问题。

    (function($){
    
          jQuery.fn.showhidePlugin = function(){
             
              //插件相关代码
        
            }   
    
    })(jQuery);        

    2,设定插件选项

    通过传递给插件方法一个options参数,我们就可以让插件支持设置选项。我们使用一个JSon对象作为插件的默认选项。

    我们使用一个JSON对象作为插件的默认选项,这个插件有3个默认选项----numShown、showText和hideText。默认设置在插件内部初始化,运行时传递进来的用户选项会覆盖掉默认设置。

    (function($){
    
           jQuery.fn.showhidePlugin = function(options){
                
               //设定默认值,用逗号分隔选项
              var  defaults = {
                      numShown:10,
                      showText:'Show More Links',
                      hideText:'Hide Links'
               }
          };
    
    
      })(jQuery);

        接下来,使用$.extend方法合并默认选项和用户选项。如果调用时提供了用户选项,它们将覆盖掉插件内部声明的默认选项。

       .extend()允许你使用一个或多个对象扩展基准对象,扩展的方式是依序将右边的对象合并到基准对象

    (function($){
        jQuery.fn.showhidePlugin = function(options){
    
           //设定默认值,用逗号分隔选项
           var  defaults = {
                      numShown:10,
                      showText:'Show More Links',
                      hideText:'Hide Links'
                }
           var options  = $.extend(defaults,options);
    
       };
    
    })(jQuery);

    3,创建插件

    接下来将混合使用jQuery脚本和Javascript原生脚本实现插件的主体功能。这个插件将适用于任何无序列表。我们使用numShown变量的值截断这个列表,然后添加隐藏和显示链接来切换隐藏项的显示状态。

    (1)添加一个.each()方法迭代选择器匹配的元素,并返回this对象。这一步非常重要,所有的插件都要有这一步才能正常工作,在一个无序列表上应用该插件时,.each方法就会遍历那个无序列表的所有项

    (2)创建两个变量--o和obj.   o引用options,obj引用$(this),有了这两个变量,后面引用起它们来就省很多事,变量obj中保存的是包裹着当前无序列表的jQuery对象

     插件jquery.showhidePlugin.js完整代码:

     1 /**
     2  * Created by Administrator on 2017/7/14 0014.
     3  */
     4 /*调用方式
     5      $('.big-list').showhidePlugin({
     6          numShown:10,
     7          showText:'显示更多的链接',
     8          hideText:'隐藏部分链接'
     9      });
    10 
    11 * */
    12 (function($){
    13     jQuery.fn.showhidePlugin = function(options){
    14 
    15         //设置默认值,用逗号分隔选项
    16         var defaults = {
    17             numShown:10,
    18             showText:'show more links',
    19             hideText:'Hide Links'
    20         };
    21 
    22         var options  = $.extend(defaults,options);
    23         return this.each(function(){
    24             var o = options;
    25             var obj = $(this);
    26             //确定项数并计算被隐藏项的数目
    27             var pLength = obj.children().length;  //所有的链接个数
    28             var numHidden = pLength-o.numShown;   //需要隐藏的链接个数
    29             var pList = obj.children();
    30 
    31             //设置显示/隐藏链接
    32             var shLink = "<a href='#' class='view'>"+o.showText+"</a>";
    33             if(pLength>o.numShown){  //如果链接总数大于用户要设置显示的个数,---就把showText文字显示在列表上面
    34                 jQuery(shLink).insertBefore(obj);
    35             }
    36 
    37             //循环ul下的所有li
    38             pList.each(function(index){
    39                 if(index < o.numShown){
    40                     jQuery(pList[index]).show();
    41                 }else{
    42                     //给所有隐藏的元素加上class--hidden
    43                     jQuery(pList[index]).hide();
    44                     jQuery(pList[index]).addClass('hidden');
    45                 }
    46             });
    47 
    48             //切换文本
    49             jQuery("a.view").live('click',function(e){
    50                 if (jQuery(this).text()==o.showText){
    51                     jQuery(this).text(o.hideText);
    52                 }else{
    53                     jQuery(this).text(o.showText);
    54                 }
    55                 jQuery('.hidden').toggle(); //切换(隐藏/显示状态)
    56                 return false;     //使用return false 避免触发click事件的默认行为(重定向)
    57             });
    58         });
    59     }
    60 })(jQuery);

    插件调用示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>jquery插件的编写</title>
    </head>
    <body>
        <ul class="big-list">
            <li>Test1.</li>
            <li>Test2.</li>
            <li>Test3.</li>
            <li>Test4.</li>
            <li>Test5.</li>
            <li>Test6.</li>
            <li>Test7.</li>
            <li>Test8.</li>
            <li>Test9.</li>
            <li>Test10.</li>
            <li>Test11.</li>
            <li>Test12.</li>
            <li>Test13.</li>
            <li>Test14.</li>
            <li>Test15.</li>
            <li>Test16.</li>
            <li>Test17.</li>
            <li>Test18.</li>
            <li>Test19.</li>
            <li>Test20.</li>
            <li>Test21.</li>
            <li>Test22.</li>
            <li>Test23.</li>
            <li>Test24.</li>
            <li>Test25.</li>
        </ul>
    </body>
    <script src="jQuery/1.7.2/jquery.min.js"></script>
    <script src="js/jquery.showhidePlugin.js"></script>
    <script>
        $(function(){
    
            $('.big-list').showhidePlugin({
                numShown:10,
                showText:'显示更多的链接',
                hideText:'隐藏链接'
            });
        });
    
    
    </script>
    </html>
  • 相关阅读:
    ref out param 区别
    SQL语句执行顺序以及oracle基本查询优化
    Ext.LoadMask遮罩的效果几种实现方式
    用ajax技术实现无闪烁定时刷新页面
    ExtJs 实现动态列,动态多表头 在这里添加日志标题
    Ajax中文乱码问题解决方法(服务器端用servlet)
    订购国际机票的常用指令
    ETERM航班销售控制指令
    线程wait()和sleep()的区别
    JSt中对象的prototype属性
  • 原文地址:https://www.cnblogs.com/qianxunpu/p/7168834.html
Copyright © 2020-2023  润新知