原生函数写法
将一个javascript方法改写为js插件最简单的方式就是将这个方法挂载到window全局对象下面
我们先来看看最原始的使用函数写法的代码:
tab.html
jquery_hjb_tab插件demotab1tab2tab3tab4
内容一内容二内容三内容四
h.css
@charset utf-8;/*//author:hjb2722404//description://date:2016/2/18*/.tabs ul { width: 100%; list-style-type: none;}.tabs ul li { width: 48%; display: inline-block; margin: 0; padding: 0;}.tabs ul li a {border-bottom: 3px solid #cccccc; width: 100%; height: 100%; display: block; text-align: center; min-height: 40px; line-height: 40px; text-decoration: none; font-family: 微软雅黑; color: #a94442}.tabs ul li a.cur { border-bottom: 3px solid #f26123;}.tabcons section { display: none;}.tabcons section:nth-child(1) { display: block;}
上面两份代码为基本代码,之后我们后一步步在这份代码的基础上进行改进。
原生插件写法
好,现在,我们就来将这个方法改写成挂载在window对象下的插件:
tab.html
……// 下面是第一次改动
h_tabs.js
window.h_tab = function(tabid){var olinks = document.getelementbyid(tabid).getelementsbytagname(a);var ocons = document.getelementbyid(tabid).getelementsbytagname(section);for(var i = 0; i
jquery写法
我们尝试引入jquery库,将此插件改写为jquery插件。
jquery插件有三种形式:类级别的形式,对象级别的形式,jquery ui组件的形式
jquery 类级别插件写法–单个方法
我们先来看类级别插件的形式。
第一种类级别插件的形式,直接把该方法挂载到jquery的根空间下,作为一个工具方法:
tab.html
……
h_tabs.js
$.h_tab = function(tabid){var olinks = document.getelementbyid(tabid).getelementsbytagname(a);var ocons = document.getelementbyid(tabid).getelementsbytagname(section);for(var i = 0; i
如果你想要将多个方法绑定到jquery根空间上面,那么像下面这样写:
tab.html
……
h_tabs.js
$.extend({h_tab:function(tabid){var olinks = document.getelementbyid(tabid).getelementsbytagname(a);var ocons = document.getelementbyid(tabid).getelementsbytagname(section);for(var i = 0; i
所以我们要用到对象级别的插件开发方式。
jquery对象级别插件写法
对象级别的插件开发方式是利用$.fn.extend()方法将自己的方法绑定到jquery原型上去,这样所有jquery对象队可以应用该方法来执行相应操作了
代码如下:
tab.html
……
h_tabs.js
(function($){$.fn.extend({h_tab:function(tabid){var olinks = document.getelementbyid(tabid).getelementsbytagname('a');var ocons = document.getelementbyid(tabid).getelementsbytagname('section');for(var i = 0; i
在这里,还有一些问题,就是我们的方法必须传参数才可以运行,这就导致调用的时候我们使用$(‘#tab')选择了id为tab的div,然后在插件里我们又根据传入的id获取了一遍该元素。
既然我们已经使用了jquery的选择器,那么我们就可以引入this来解决重复获取元素的冗余问题。
jquery对象级别插件写法-引入this
tab.html
……
h_tabs.js
(function($){$.fn.extend({h_tab:function(){//在这里引入thisvar olinks = this.find('a');var ocons = this.find('section');for(var i = 0; i
作为一款插件,它应该是可以被开发者控制的,所以还应该提供给使用者一些配置接口。
jquery对象级别插件写法-加入配置项
tab.html
……tab1tab2……
我们这里把一开始的”当前选项卡标签样式类名称“由”cur“改为了”current“,并将其作为配置项传入插件
h.css
.tabs ul { width: 100%; list-style-type: none;}.tabs ul li { width: 48%; display: inline-block; margin: 0; padding: 0;}.tabs ul li a {border-bottom: 3px solid #cccccc; width: 100%; height: 100%; display: block; text-align: center; min-height: 40px; line-height: 40px; text-decoration: none; font-family: 微软雅黑; color: #a94442}/*注意下面一行与之前的样式代码的对比变化之处*/.tabs ul li a.current { border-bottom: 3px solid #f26123;}.tabcons section { display: none;}.tabcons section:nth-child(1) { display: block;}
我们在样式表中做出了相应的改动。
h_tabs.js
(function($){$.fn.extend({//给方法传入一个对象作为参数h_tab:function(opts){//定义默认的配置var defaults ={curname : 'cur'};//将传入的参数覆盖默认参数中的默认项,最终合并到一个新的参数对象上var opt = $.extend({},defaults,opts);var olinks = this.find('a');var ocons = this.find('section');for(var i = 0; i
以上所述是小编给大家介绍的javascript tab选项卡插件实例代码,希望对大家有所帮助!