bootstrap无限级分类 jq拓展 之前的无限级分类的封装版~

1 篇文章 0 订阅
1 篇文章 0 订阅

git地址:https://github.com/zhangjiahao93/jQ.select

HTML部分

复制代码
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>多级联动封装</title>
    <link href="./css/bootstrap.css" rel="stylesheet">
    <script src="./js/jquery.js"></script>
    <script src="./js/duoji.js"></script>
</head>
<body>

<div class="row" style="margin:100px auto;">
    <div class="col-md-12" id="box"></div>  
</div>
<div class="row" style="margin:100px auto;">
    <div class="col-md-12" id="box2"></div>  
</div>

<script>
    //基础用法
    $.select({boxName:'box'})
    //详细配置
    $.select({
        boxName:'box2',
        className:'area2',
        url:'./area.php',
        type:'get',    
        dataType:'json',
    })
    
    /*
        boxName:'box',      //容器名
        className:'area',    //每个事件的定位class
        url:'./area.php',    //请求的地址
        type:'get',            //请求传输方式
        dataType:'json',    //使用jsonp方式
    */
    
</script>

</body>
</html>
复制代码

 

duoji.js 代码

复制代码
(function ($) {
    $.select=function(config){
        var i=new select;
        return i.init(config)
    }
    //声明多级联动 方法类
    var select = new Function();
    select.prototype={
        //定义类属性
        init:function(config){
            /**
             * 这些是预定义属性
             */
            this.boxName='box';                //容器名
            this.className='area';          //每个事件的定位class
            this.url='./area.php';          //默认选项

            //this.classObj=$("."+className); //每个事件的定位class 的对象 --基本没用所以废除了
            this.type= 'get';                //传输方式
            this.dataType='json';             //使用jsonp方式
            
            //解包解出配置信息 覆盖上面的属性
            for(var key in config){
                this[key] = config[key];
                //console.log(key+':'+config[key]+' this.key:'+this.key);
            }
            //console.log(this.boxName);
            
            var boxName=this.boxName;
            this.box=$('#'+boxName);        //需要添加元素的容器
            
            //最后创建
            this.create();                    //新建一个select获取 
        },
        
        create:function(){
            //声明外部变量
            var boxName=this.boxName;
            var className= this.className;
            var box=this.box;
            var url=this.url;
            var obj=this;
            var type=this.type;
            var dataType=this.dataType;
            
            
            $.ajax({
              type: type,
              dataType:dataType,
              url: url,
              data: {id:'0'},
              sync: true,//设置异步模式
              success: function(data){
                var option="<option value=''>请选择</option>";
                var list=data.data;
                for(var key in list){
                    option+="<option value='"+key+"'>"+list[key].areaname+"</option>";
                }
                $('<div class="col-md-2 pl0"><select name="'+className+'[]" num="0" class="form-control input-sm '+className+'">'+option+'</select></div>').appendTo(box).find('select').bind('change',function(){obj.change($(this))});
              }
           });
            
        },
        
        //change事件
        change:function(event){
            //声明 

            var box =this.box;                    //获取所有插入盒子的对象
            var className=this.className        //获取模型的className
            
            var classObj=$('.'+className);        //获取所有Class所在元素组 这里要在注意 重新生成classObj 因为他是动态的
            var num=classObj.index($(event))+1; //获取num的值
            //console.log(classObj.index($(event)));
            
            var id=$(event).val();                //获取ajax发送id的头
            var obj=this;                        //代表这个方法            
            var url=this.url;                    //url地址            
            
            var type = this.type;                //传输方式
            var dataType=this.dataType;            //数据类型
            
            //清除 后续添加的新的元素
            classObj.each(function(){
                //console.log(event);
                //这里的this 代表eClass 遍历时的单个对象
                if($(this).attr('num')>$(event).attr('num')){
                    $(this).parent().remove();
                }
            });

            //循环ajax方法
            $.ajax({
              type: type,
              dataType:dataType,
              url: url,
              data: {id:id},
              sync: true,//设置异步模式
              success: function(data){
                //console.log(data);
                var list =data.data
                if(data.state==='1'){
                    var option="<option value=''>请选择</option>";
                    for(var key in list){
                        option+="<option value='"+key+"'>"+list[key].areaname+"</option>";
                    }
                    $('<div class="col-md-2 pl0"><select name="'+className+'[]" num="'+num+'" class="form-control input-sm '+className+'" >'+option+'</select></div>').appendTo(box).find('select').bind('change',function(){obj.change(this)});
                 }
              }
           });
           
        },
        
        //查询当前盒子中的信息
        log:function(){
            var boxName=$(event).attr('pnode');  //获取触发事件者的pnode 
            var className=$(event).attr('cname');//获取触发事件者的cname
            var box =$("#"+boxName);            //获取所有插入盒子的对象
            var className=$("."+className);        //获取所有Class所在元素组
            console.log("容器名:"+boxName+"\n 触发的class名:"+className);
            
        },
        
    }
    
})(jQuery)
复制代码

 

后端提供的数据类型:json

如果有数据:state=1

例子:

复制代码
data:{
110000:{id: "110000", areaname: "北京", pid: "0", shortname: "北京", level: "1", position: "tr_0", sort: "1"}
120000:{id: "120000", areaname: "天津", pid: "0", shortname: "天津", level: "1", position: "tr_0", sort: "2"}
130000:{id: "130000", areaname: "河北省", pid: "0", shortname: "河北", level: "1", position: "tr_0", sort: "3"}
140000:{id: "140000", areaname: "山西省", pid: "0", shortname: "山西", level: "1", position: "tr_0", sort: "4"}
150000:{id: "150000", areaname: "内蒙古自治区", pid: "0", shortname: "内蒙古", level: "1", position: "tr_0", sort: "5"}
.....
},
state:"1"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值