BootStrap无限级分类(无限极分类封装版)


Posted in Javascript onAugust 26, 2016

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="./duoji.js"></script>
</head>
<body>
<div class="row" style="margin:100px auto;">
<div class="col-md-12" id="box1"></div> 
</div>
<div class="row" style="margin:100px auto;">
<div class="col-md-12" id="box2"></div> 
</div>
<script>
//容器名,name名(新生成的class名)
$.select('box1','area1');
$.select('box2','area2');
</script>
</body>
</html>

duoji.js 代码

(function ($) {
$.select=function(box,addInputClass){
var i=new select;
return i.init(box,addInputClass)
}
//声明多级联动 方法类
var select = new Function();
select.prototype={
//定义类属性
init:function(box,addInputClass){
this.boxName=box;
this.box=$('#'+box); //需要添加元素的容器
this.eleClass=addInputClass;//每个事件的定位class
this.first();//新建一个select获取 
},
first:function(){
//声明外部变量
var boxName=this.boxName;
var eleClass= this.eleClass;
var box=this.box;
var obj=this;
$.get("http://127.0.0.1:83/areas", {id:'0'},
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="'+eleClass+'[]" num="0" pnode="'+boxName+'" cname="'+eleClass+'" class="form-control input-sm '+eleClass+'">'+option+'</select></div>').appendTo(box).find('select').bind('change',function(){obj.change($(this))});
},'jsonp');
},
//change事件
change:function(event){
//声明
var boxName=$(event).attr('pnode'); //获取触发事件者的pnode 
var className=$(event).attr('cname');//获取触发事件者的cname
var box =$("#"+boxName); //获取所有插入盒子的对象
var eleClass=$("."+className); //获取所有Class所在元素组
var num=eleClass.index($(event))+1; //获取num的值
var id=$(event).val(); //获取ajax发送id的头
var obj=this; //代表这个方法
//清除 后续添加的新的元素
eleClass.each(function(){
//这里的this 代表eleClass 遍历时的单个对象
//console.log($(this).attr('num'));
//console.log($().attr('num'));
if($(this).attr('num')>$(event).attr('num')){
$(this).parent().remove();
}
});
/*
console.log(boxName);
console.log(className);
console.log($(event));
console.log($(event).val());
*/
//循环ajax方法
$.ajax({
type: "get",
dataType:"jsonp",
url: "http://127.0.0.1:83/areas",
data: {id:id},
sync: false,//设置为同步
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+'" pnode="'+boxName+'" cname="'+className+'" 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 eleClass=$("."+className); //获取所有Class所在元素组
console.log("容器名:"+boxName+"\n 触发的class名:"+className);
},
//第一个select框获取信息
getFirstElement:function(){
var main=$('#'+this.main);
$.get("http://127.0.0.1:83/areas", {id:'0'},
function(data){
var option="<option value=''>请选择</option>";
var list=data.data;
for(var key in list){
option+="<option value='"+key+"'>"+list[key].areaname+"</option>";
}
main.html(option);
},'jsonp');
}
}
})(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"}
210000:{id: "210000", areaname: "辽宁省", pid: "0", shortname: "辽宁", level: "1", position: "tr_0", sort: "6"}
220000:{id: "220000", areaname: "吉林省", pid: "0", shortname: "吉林", level: "1", position: "tr_0", sort: "7"}
230000:{id: "230000", areaname: "黑龙江省", pid: "0", shortname: "黑龙江", level: "1", position: "tr_0", sort: "8"}
310000:{id: "310000", areaname: "上海", pid: "0", shortname: "上海", level: "1", position: "tr_0", sort: "9"}
320000:{id: "320000", areaname: "江苏省", pid: "0", shortname: "江苏", level: "1", position: "tr_0", sort: "10"}
330000:{id: "330000", areaname: "浙江省", pid: "0", shortname: "浙江", level: "1", position: "tr_0", sort: "11"}
.....
},
state:"1"

如果没有数据 state=0

例子:

state:"0"

Javascript 相关文章推荐
JSON 和 JavaScript eval使用说明
Jun 13 Javascript
js实现双向链表互联网机顶盒实战应用实现
Oct 28 Javascript
IE下写xml文件的两种方式(fso/saveAs)
Aug 05 Javascript
Jquery 点击按钮自动高亮实现原理及代码
Apr 25 Javascript
JS实现简单的图书馆享元模式实例
Jun 30 Javascript
AngulaJS路由 ui-router 传参实例
Apr 28 Javascript
微信小程序 Buffer缓冲区的详解
Jul 06 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
Jul 22 jQuery
JavaScript闭包原理与用法实例分析
Aug 10 Javascript
使用webpack搭建vue环境的教程详解
Dec 31 Javascript
小程序如何定位所在城市及发起周边搜索
Feb 11 Javascript
原生JS实现飞机大战小游戏
Jun 09 Javascript
jquery 动态合并单元格的实现方法
Aug 26 #Javascript
轻松掌握JavaScript中介者模式
Aug 26 #Javascript
修改jquery中dialog的title属性方法(推荐)
Aug 26 #Javascript
修改Jquery Dialog 位置的实现方法
Aug 26 #Javascript
在线引用最新jquery文件的实现方法
Aug 26 #Javascript
纯前端JavaScript实现Excel IO案例分享
Aug 26 #Javascript
js时间比较 js计算时间差的简单实现方法
Aug 26 #Javascript
You might like
php 无限级缓存的类的扩展
2009/03/16 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
JS跨域代码片段
2012/08/30 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
jquery网页加载进度条的实现
2017/06/01 jQuery
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
axios取消请求的实践记录分享
2018/09/26 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
[57:36]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第三场 2月1日
2021/03/11 DOTA
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
对dataframe进行列相加,行相加的实例
2018/06/08 Python
python通过http下载文件的方法详解
2019/07/26 Python
python dataframe NaN处理方式
2019/12/26 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
新建文件时Pycharm中自动设置头部模板信息的方法
2020/04/17 Python
python操作链表的示例代码
2020/09/27 Python
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
一份婚庆公司创业计划书
2014/01/11 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
幼儿园亲子活动总结
2014/04/26 职场文书
婚纱店策划方案
2014/05/22 职场文书
建议书范文
2015/02/05 职场文书
音乐课外活动总结
2015/05/09 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书