组件编写1-----使用JQ生成组件

组件编写2—–使用方法生成组件

组件编写3—–对象生成组件


在JQ中添加一个方法,我们需要把这个方法绑定到JQ的$.fn对象下面,这样我们就可以像调用JQ的方法一样使用它。
下面的例子是在添加JQ新方法addBg,为对象添加背景

<!DOCTYPE html>
<html lang="zh" >
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JQ添加新方法</title>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<style>
*{margin:0;padding:0;}
ul,li{list-style: none;}
.text{margin:10px;}
</style>
<script>
//在JQ中添加新方法addBg
$.fn.addBg = function(color){
    this.css("background",color);
    return this;   //返回该对象,让JQ可以继续链式调用
}
</script>
</head>
<body>
<div class="text">123</div>
<button id="btn">改变背景色</button>
<script>
$("#btn").click(function(){
    $(".text").addBg("red");
})
</script>
</body>
</html>

这里写图片描述
addBg 里面的this是一个JQ对象来的,所以可以直接使用JQ的方法,执行完addBg方法后,应该执行return this;这样可以继续使用JQ的链式调用。

我们在编写一个插件的时候,往往要做的事件很多,而且还需要提供接口,让初始化后的组件可以调用。使用JQ初始化插件,其实它是在该方法中先初始化一个组件对象,再把这个对象return出去,外部接收后进行调用。
下面写一个下拉框的组件。

<!DOCTYPE html>
<html lang="zh" >
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>组件开发1----jq绑定</title>
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<style>
*{margin:0;padding:0;}
ul,li{list-style: none;}
.demo{margin:10px;}
</style>
<script>
//添加插件
jQuery.fn.extend({
    selection : function(option){
        var $that = this;
        function dropList(){
            //拼接结构
            function _struct(){
                var str = '<select class="r-select">';
                for(var i=0;i<option.data.length;i++){
                    if(option.default == i){
                        str += '<option selected=selected value="'+ option.data[i] +'">'+ option.data[i] +'</option>';
                    }else{
                        str += '<option value="'+ option.data[i] +'">'+ option.data[i] +'</option>';
                    }
                }
                str += '</select>';
                $that.empty().append(str);
            }
            function _bind_Event(){
                //下拉框改变时,执行回调
                $that.delegate(".r-select","change",function(){
                    option.selectBack && option.selectBack.call($(this)[0],$(this).val());
                });
            }
            //改变当前值
            function _change(val){
                var obj = $that.find('.r-select option[value="'+ val +'"]');
                obj.prop("selected","selected");
                option.selectBack && option.selectBack.call(obj.closest(".r-select")[0],obj.val());
            }
            function _init(){
                _struct();  //初始化时生成结构
                _bind_Event();  //绑定事件
            }
            _init();
            return {
                change : _change    //返回一个接口,让用户通过这个接口改变下拉框的值
            }
        }
        return dropList();  //执行方法,并返回给外部使用
    }
})
</script>
</head>

<body>
<div class="demo" id="select1"></div>
<div class="demo" id="select2"></div>
<script>
var data = ["选择1","选择2","选择3","选择4","选择5"];
//选择后的回调
function callBack(data){
    console.log("现在的选择是: " + data);
    console.log("对象: ",this);
}

//初始化
var mySelect1 = $("#select1").selection({
    'data' : data,
    default : 0,
    selectBack : callBack
});
var mySelect2 = $("#select2").selection({
    'data' : data,
    default : 0,
});

window.setTimeout(function(){
    mySelect1.change("选择3");    //  改变值
},2000);

</script>
</body>
</html>

这里写图片描述
这就是使用JQ编写组件的方式,不过组件生成后,无法继续使用链式调用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值