gistfile1.txt 实现以下数据格式的任意级选择器级联的控件[ { text:'第一级' value:'1', list:[ { text:'第二级' value:'1.1', list:[ { text:'第三级' value:'1.1.1', list:[] }, ... ] }, ... ] }, ...] index.js var data =
实现以下数据格式的任意级选择器级联的控件 [ { text:'第一级' value:'1', list:[ { text:'第二级' value:'1.1', list:[ { text:'第三级' value:'1.1.1', list:[] }, ... ] }, ... ] }, ... ]index.js
var data = [ { text:'1',value:'1',list:[ { text:'1.1',value:'1.1',list:[ { text:'1.1.1',value:'1.1.1',list:[ {text: '1.1.1.1',value:'1.1.1.1'}, {text: '1.1.1.2',value:'1.1.1.2'}, {text: '1.1.1.3',value:'1.1.1.3'}, {text: '1.1.1.4',value:'1.1.1.4'}, ] }, { text:'1.1.2',value:'1.1.2',list:[ {text: '1.1.2.1',value:'1.1.2.1'}, {text: '1.1.2.2',value:'1.1.2.2'}, {text: '1.1.2.3',value:'1.1.2.3'}, {text: '1.1.2.4',value:'1.1.2.4'}, ] }, { text:'1.1.3',value:'1.1.3',list:[ {text: '1.1.3.1',value:'1.1.3.1'}, {text: '1.1.3.2',value:'1.1.3.2'}, {text: '1.1.3.3',value:'1.1.3.3'}, {text: '1.1.3.4',value:'1.1.3.4'}, ] }] }, { text:'1.2',value:'1.2',list:[ { text:'1.2.1',value:'1.2.1',list:[ {text: '1.2.1.1',value:'1.2.1.1'}, {text: '1.2.1.2',value:'1.2.1.2'}, {text: '1.2.1.3',value:'1.2.1.3'}, {text: '1.2.1.4',value:'1.2.1.4'}, ] }, { text:'1.2.2',value:'1.2.2',list:[ {text: '1.2.2.1',value:'1.2.2.1'}, {text: '1.2.2.2',value:'1.2.2.2'}, {text: '1.2.2.3',value:'1.2.2.3'}, {text: '1.2.2.4',value:'1.2.2.4'}, ] }, { text:'1.2.3',value:'1.2.3',list:[ {text: '1.2.3.1',value:'1.2.3.1'}, {text: '1.2.3.2',value:'1.2.3.2'}, {text: '1.2.3.3',value:'1.2.3.3'}, {text: '1.2.3.4',value:'1.2.3.4'}, ] }] }] }, { text:'2',value:'2',list:[ { text:'2.1',value:'2.1',list:[ { text:'2.1.1',value:'2.1.1',list:[ {text: '2.1.1.1',value:'2.1.1.1'}, {text: '2.1.1.2',value:'2.1.1.2'}, {text: '2.1.1.3',value:'2.1.1.3'}, {text: '2.1.1.4',value:'2.1.1.4'}, ] }, { text:'2.1.2',value:'2.1.2',list:[ {text: '2.1.2.1',value:'2.1.2.1'}, {text: '2.1.2.2',value:'2.1.2.2'}, {text: '2.1.2.3',value:'2.1.2.3'}, {text: '2.1.2.4',value:'2.1.2.4'}, ] }, { text:'2.1.3',value:'2.1.3',list:[ {text: '2.1.3.1',value:'2.1.3.1'}, {text: '2.1.3.2',value:'2.1.3.2'}, {text: '2.1.3.3',value:'2.1.3.3'}, {text: '2.1.3.4',value:'2.1.3.4'}, ] }] }, { text:'2.2',value:'2.2',list:[ { text:'2.2.1',value:'2.2.1',list:[ {text: '2.2.1.1',value:'2.2.1.1'}, {text: '2.2.1.2',value:'2.2.1.2'}, {text: '2.2.1.3',value:'2.2.1.3'}, {text: '2.2.1.4',value:'2.2.1.4'}, ] }, { text:'2.2.2',value:'2.2.2',list:[ {text: '2.2.2.1',value:'2.2.2.1'}, {text: '2.2.2.2',value:'2.2.2.2'}, {text: '2.2.2.3',value:'2.2.2.3'}, {text: '2.2.2.4',value:'2.2.2.4'}, ] }, { text:'2.2.3',value:'2.2.3',list:[ {text: '2.2.3.1',value:'2.2.3.1'}, {text: '2.2.3.2',value:'2.2.3.2'}, {text: '2.2.3.3',value:'2.2.3.3'}, {text: '2.2.3.4',value:'2.2.3.4'}, ] }] }] }]; var selecters = document.getElementsByTagName("select"); function cascade(selectList,data){ function Selecter(selectList,data){ this.selectList = selectList; this.length = selectList.length; this.list = data; this.init(); this.fillSelect(this.selectList[0],this.list); } //构造函数初始化,给每一个select标签安装change监听器 Selecter.prototype.init = function (){ for(var i = 0; i < this.length; i++){ this.selectList[i].addEventListener('change', function(index){ this.event(index); }.bind(this,i) ); } } //给select标签增加option Selecter.prototype.fillSelect = function (select,list){ list.forEach(function(data){ var option = new Option(data.text,data.value); select.add(option); }); } //实现监听事件 Selecter.prototype.event = function(index){ this.remove(index); this.reselect(index); if(index < this.length - 1){ index += 1; } this.fillSelect(this.selectList[index],this.list); } //当某一级select发生改变时,删除后代级select的option Selecter.prototype.remove = function(index){ for(var j = index + 1; j < this.length; j++){ for(var i = this.selectList[j].length - 1; i > 0; i--){ this.selectList[j].remove(i); } } } //当改变前面的select时,将数据定位到改变的select Selecter.prototype.reselect = function(index){ this.list = data; for(var i = 0; i < index + 1; i++){ this.index = this.selectList[i].selectedIndex; if(this.list[this.index -1]){ this.list = this.list[this.index-1]; } this.list = this.list.list || []; } } //创建Selecter的实例 var selecter = new Selecter(selectList,data); } cascade(selecters,data);index.html
hello