jquery06-plugin

<script type="text/javascript">
/*直接通过$.方法名称就可以定义一个全局的插件,这种定义带来的问题:
 1.一般插件都需要通过一个独立的js文件来存储,命名的规则确定
 2.如果将来$这个符号被jQuery.noconfilct()之后,如何保证还能继续使用*/
$.say=function(hello){
    alert("hello"+hello);
}
$(function(){
    $.say("ok");
});
</script>
//
<!-- 引入自定义插件 -->
jquery.util.movie.js:
/*jQuery.say=function(hello){
    alert("Hello "+hello);
}*/

//jQuery.noConflict();
//此时的$就不再是jQuery中的$,而是闭包中的$,而闭包中的$又是jQuery对象
(function($){
    $.say=function(hello){
        alert("Hello "+hello);
    }
    /*如果有一个插件,参数很多,而且很多参数并不是必须的
     * 如此在调用的时候就会非常麻烦*/
    //$.complex=function(p1,a2,a3,a4,a5,a6,a7,a8){}
    /*插件参数的解决方法一般是通过options来定义
     * options中一般使用json来定义,这个时候就可以灵活地确定参数个数
     * 在代码中通过extend方法完成覆盖*/
    $.complex=function(p1,options,p2){
        var settings=$.extend({
            a2:"ok",
            a3:"hello",
            a4:"你好"
        },options||{});
        alert(p1+","+p2);
        alert(settings.a2+","+settings.a3+","+settings.a4);
    }
})(jQuery);
//传入jQuery作为参数,
///
<script type="text/javascript" src="jquery.util.movie.js"></script>
<script type="text/javascript">
/*直接通过$.方法名称就可以定义一个全局的插件,这种定义带来的问题:
1.一般插件都需要通过一个独立的js文件来存储,命名的规则确定
2.如果将来$这个符号被jQuery.noconfilct()之后,如何保证还能继续使用
    解决方式:1.不再通过$,而是直接通过jQuery来调用,但是会增加工作量
          2.通过闭包来解决,将插件定义全部放到一个闭包中 
3.如何为插件确定参数,如果一个方法存在7个参数*/
$(function(){
    $.say("ok");
    $.complex(45,{a2:"98"},22);
});
</script>
//
<script type="text/javascript">
$(function(){
    //检测浏览器是否是IE浏览器
    //alert($.browser.mozilla );
    /* if($.browser.msie){
        //获取IE版本号
        alert($.browser.version);
    } */
    /*each不仅可以遍历数组,还可以遍历对象,如果遍历的是数组,只有一个参数
    遍历对象有两个参数*/
    /*var person={name:"校长",age:29};
    $.each(person,function(key,value){
        alert(key+","+value);
    }); */
    var person1={name:"校长",age:29,address:"昭通"};
    var person2={name:"女校长",age:45};
    /*会用第二个参数来覆盖第一个参数,没有的就不进行覆盖,返回第一个参数,第二个参数不会变化*/
    /* var p=$.extend(person1,person2);
    alert(person1.name+","+person1.age+","+person1.address);
    alert(p.name+","+p.age+","+p.address);
    alert(person2.name+","+person2.age+","+person2.address); */
    var po=new Object;
    /*此时会把person2的值覆盖到person1中,并且存储到po中,并返回po*/
    var p=$.extend(po,person1,person2);
    /* alert("person1:"+person1.name+","+person1.age+","+person1.address);
    alert("p:"+p.name+","+p.age+","+p.address);
    alert("person2:"+person2.name+","+person2.age+","+person2.address);
    alert("po:"+po.name+","+po.age+","+po.address); */
    /*extends在写插件的时候极为有用*/
    /*grep()有两个参数值,第一个表示元素值,第二个表示索引*/
    /* var as=$.grep([1,2,3,4,5],function(n,i){
        return n%2==0;
    });
    alert(as); */
    var as=$.grep($("table tr"),function(n,i){
        //也可以传入包装集
        return $(n).find("td").is(":contains('张')");
    });
    //$(as).css("color","#f00");
    //alert($.inArray("1",[1,23,4,5]));
    /*如果找到返回所在下标,如果没有找到,返回-1*/
    //alert($.inArray(1,[1,23,4,5]));
    //alert($("table tr").toArray());
    //可以对元素的属性进行统一处理
    /* var ms=$.map([2,4,6,8],function(n){
        return 10*n;
    });
    alert(ms); */
    
    /* var ms=$.map({name:"aaa",age:123},function(value,key){
        var v="";
        if(key=='name'){
            v="老张"
        }
        if(key=='age'){
            if(value>100) v=99;
            return "老张"
        }
        return v;
    });
    alert(ms); */
    /* var a1=[1,2,3,4];
    var a2=[2,34,5];
    alert($.merge(a1,a2));
    alert(a1); */
    var p={username:"张三",age:23};
    alert($.param(p));
});
</script>

///
(function($){
    $.fixedTopicWidth=function(str,options){
        //(abcasdfasdfasdfasdf,12,".")--->asdasdads...
        var setting=$.extend(
                {length:50,fill:null,fillLength:3},
                options||{});
        var pos=length-str.length;
        if(pos>0){
            return str;
        }else{
            if(setting.fill){
                var fs="";
                for(var i=0;i<setting.fillLength;i++){
                    fs=fs+setting.fill;
                }
                return (str.substr(0,setting.length-3)+fs);
            }else{
                return str.substr(0,setting.length);
            }
        }
    }
    
    /*使用$.fn来创建包装集插件*/
    $.fn.setColor=function(){
    /*此时的this指的是整个包装集对象,已经被封装为包装集
     * 就不用再使用$(this)来封装*/
        this.css("color","#0f0");
    //基于包装集的函数一定要支持链式结构
        return this;
    }
    
    $.fn.formatTopic=function(options){
        this.each(function(){
        /*这个时候的this就不再是包装集对象,而是这个闭包对象
         * 此时闭包对象中的引用是一个html的节点,要访问就需要使用$(this)*/
            $(this).html($.fixedTopicWidth($(this).html(),options));
        });
    }
    
    /**
     * 如果state为true就表示readonly,否则表示取消readonly
     * */
    $.fn.setReadOnly=function(state){
    //1.找到所有的文本框
        return this.filter("input:text").prop("readOnly",state)
        .css("opacity",state?0.5:1.0);
    }
})(jQuery);


转载于:https://my.oschina.net/686991/blog/364478

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值