zoukankan      html  css  js  c++  java
  • jQuery插件编程实践(Step1)

    相应代码
    1、bootstrap/3.3.7/bootstrap.css
    2、site.css
    3、bootstrap.min.js
    4、jquery-3.3.1.js
    5、tag_list.js
    6、index.html
    第一阶段,实现DOM节点在页面显示,效果图如下,这个2个tag是用本次自定义jQuery插件显示的。
    代码风格参考之  jQuery pagination plugin v1.4.2
    1、 index.html 
    <div class="row">
      <div id="tagList"></div>
    </div>
    ....
    <script type="text/javascript">
      //运行插件
      $(function () {
        $('#tagList').tagsPagination({
          startPage: 1
        });
      })
    </script>

    2、 tag_list.js 

     1 //参考jquery.twbsPagination 怎样设计一个插件。小括号,里面声明一个function,之后用子运行模式执行
     2 (function ($, window, document, undefined) {
     3   'use strict';
     4   var TagsPagination = function(element,options){
     5     this.$element = $(element); //将插件初始化时传入的html dom对象转jQuery对象,这里是div,拿到这个对象很重要,之后就可以基于它做很多事情
     6     
     7     //定义对象基本设置参数对象,合并2个对象到第一个对象
     8     this.options = $.extend({}, $.fn.tagsPagination.defaults, options);//设计模式,参数处理
     9     
    10     var tagName = (typeof this.$element.prop === 'function') ?
    11       this.$element.prop('tagName') : this.$element.attr('tagName');
    12     
    13     //访问页面上的HTML DOM对象
    14     // var t = this.$element.first();
    15     // console.info(t);
    16     this.$listContainer = this.$element;//赋值基本属性$listContainer,容器对象
    17 
    18     //this.show();
    19     //1.绚烂插件对象的DOM,并将绚烂的结果用append方法追加到由参数传入的dom对象上去
    20     this.render(this.getPages(this.options.startPage));//getPages在下面prototyp链中定义
    21     return this;//编程模式,不影响DOM显示
    22   };
    23   //基本设计模式,在大括号内定义,对TagsPagination原型链进行编程
    24   TagsPagination.prototype = {
    25     constructor: TagsPagination,
    26     //销毁jQuery对象
    27     destroy:function () {
    28 
    29     },
    30     show:function() {
    31 
    32     },
    33     //render相关基础function, 绚烂所有的tag标签,返回数组类型
    34     _buildListItems: function (pages) {
    35       var listItems = [];
    36       for(var i = 0; i < pages.tags.length; i++){
    37         listItems.push(this._buildItem('page', pages.tags[i]));
    38       }
    39       return listItems;
    40     },
    41     //render相关基础function  绚烂一个tag DOM标签,返回jQuery对象
    42     _buildItem:function(type,tag) {
    43       //绘制一个tag标签的dom节点
    44       var $itemContainer = $('<div></div>'), $itemContent = $('<span></span>');
    45       // var $itemDelIcon = $('<span></span>');
    46 
    47       $itemContainer.addClass('tag_container');
    48       $itemContent.addClass('label label-default').html(tag); 
    49       // $itemDelIcon.addClass('glyphicon glyphicon-remove-circle');
    50       // $itemDelIcon.attr('aria-hidden',"true");
    51       // $itemContainer.append($itemContent).append($itemDelIcon);
    52       $itemContainer.append($itemContent);
    53       return $itemContainer;
    54     },
    55     //render相关基础function 获取tag数据,怎样和ajax结合,返回结果传给render function
    56     getPages: function (currentPage) {
    57       //TODO Mock(模拟)
    58       var tags = [];
    59       tags.push("Default");
    60       tags.push("Primary");
    61       return {"currentPage": currentPage, "tags": tags};
    62     },
    63     //核心方法,在对象构造器中被调用
    64     render: function (pages) {
    65       var _this = this;
    66       this.$listContainer.children().remove();
    67       var items = this._buildListItems(pages);
    68       $.each(items, function (key, item) {
    69         _this.$listContainer.append(item);
    70       });
    71 
    72     }
    73   }
    74 
    75   //入口之一:开始定义插件模块,页面引用从这里加载执行
    76   $.fn.tagsPagination = function(option){
    77     console.log("PLUGIN DEFINITION");
    78     var data = new TagsPagination(this, option);//调用自己定义的jQuery插件对象,之后就是思考怎样定义TagsPagination对象了
    79   };
    80   //将自定义JS对象赋值给插件,感觉仅仅起到标识作用
    81   //$.fn.tagsPagination.Constructor = TagsPagination;
    82 
    83 })(window.jQuery, window, document);

    //TODO 事件处理以及和ajax联动   jQuery插件编程实践(Step2)

  • 相关阅读:
    jq获取地址中的参数的值
    移动设备分辨率
    随机生成颜色
    小程序轮播图
    JavaScript中的constructor、instanceof、isPrototypeOf、typeof以及hasOwnProperty
    call()和apply()函数
    行内元素和块级元素
    js跳出循环的方法区别(break,continue,return)
    js 的四种设计模式的优缺点
    常见浏览器兼容性问题与解决方案
  • 原文地址:https://www.cnblogs.com/zhuji/p/14262203.html
Copyright © 2011-2022 走看看