编写jQuery插件(三)——三个插件例子

封装jQuery对象方法的插件

表格隔行变色插件

CSS部分:

.even{
    background:#CCC;
}
.odd{
    background:#666;
}
.selected{
    background:#F90;
}

DOM结构:

<table id="table1">
<tbody>
<tr><th>选择</th><th>姓名</th><th>性别</th></tr>
<tr><td><input type="checkbox" checked="checked" /></td><td>小明</td><td></td></tr>
<tr><td><input type="checkbox" /></td><td>小花</td><td></td></tr>
<tr><td><input type="checkbox" /></td><td>小红</td><td></td></tr>
<tr><td><input type="checkbox" /></td><td>小华</td><td></td></tr>
</tbody>
</table>

 

插件部分:

;(function(){
    $.fn.extend({
        "alterBgColor":function(options){
            //设置默认值
            options=$.extend({
                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 isSelected=$(this).hasClass(options.selected);//返回布尔值,判断是否已被选中
                //如果被选中就移出selected类,否则加上selected类
                $(this)[isSelected?"removeClass":"addClass"](options.selected)//removeClass(myclass)或者addClass(myclass)
                //查找内部的checkbox,设置对应的属性
                .find(':checkbox').attr('checked',!isSelected);//v1.7.1正常,v1.11.1经测试在IE9及以上版本点击复选框外的地方,checkbox不能交替选择            });
            });
            //如果单选框默认情况下是选择的,则高亮
            $('tbody>tr:has(:checked)',this).addClass(options.selected);
            return this;    //返回this,使方法可链
        }
    });    
})(jQuery);

 

插件使用:

$("#table1").alterBgColor()                        //应用插件
            .find("th").css("color","red");        //可以链式操作

封装jQuery全局函数的插件

去除左侧和右侧的空格

插件部分:

;(function($){
 $.extend({
  ltrim:function(text){
   return (text||"").replace(/^\s+/g,"");
  },
  rtrim:function(text){
   return (text||"").replace(/\s+$/g,"");
  }
 });
})(jQuery);

插件使用:

alert(jQuery.trim("  Hello  ")+jQuery.ltrim("   World")+jQuery.rtrim("!    "));

 

自定义选择器

 jQuery的选择符解析器首先会使用一组正则表达式来解析选择器,然后针对解析出的每个选择符执行一个函数,称为选择器函数。最后根据这个选择器函数的返回值为true还是false来决定是否保留这个元素。这样就可以找到匹配的元素节点。

between选择器,如使用$("div:between(2,5)")能实现获取索引值为3、4元素的功能。

DOM结构:

<div style="background:red">0</div>
<div style="background:blue">1</div>
<div style="background:green">2</div>
<div style="background:yellow">3</div>
<div style="background:gray">4</div>
<div style="background:orange">5</div>

插件定义:

;(function($){
    $.extend(jQuery.expr[":"],{
        /*
     选择器仅仅是jQuery.expr[":"]对象的一部分,同时也是一个Object对象,因此可以直接利用jQuery.extend()对其扩展
a指向当前遍历到的DOM元素 i指的是当前遍历到的DOM元素的索引值,从0开始 m,由jQuery正则解析引擎进一步解析后的产物(用match匹配出来),是一个数组 以$("div:gt(1)")为例: m[0],指:gt(1) m[1],指":",即冒号。当然并非只能使用“:”后面跟上选择器,用户可以自定义其他的选择引导符 m[2],指gt,确定选择器选择器函数 m[3],指数字“1" m[4],如果是div:l(ss(dd))这样一个选择器,m[4]指向(dd)这部分,注意是带括号的(dd),此时的m[3]的值是ss(dd)而非ss
*/ between:function(a,i,m){ var tmp=m[3].split(",");//将传递进来的m[3]以逗号为分隔符,切成一个数组 return tmp[0]<i&&i<tmp[1]; } }); })(jQuery);

插件应用:

$(function(){
    $("div:between(2,5)").css("background","white");//经测试jquery v1.11.1版本不支持
})

 

转载于:https://www.cnblogs.com/aaron-shu/p/4098298.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值