一个不错的仿携程自定义数据下拉选择select


Posted in Javascript onSeptember 01, 2014

这是一个仿携程自定义的数据下拉选择select,对一些比较重要的参数进行的描述,方便初学者

/* 
*id : id 当前插件的父元素 
*data : json 选择的数据(json格式) 
*bool : true/false data数据如果要分离成两个 值为true 
*config : 配置data的内部对象(type在bool为true的时候生效) 
{ 
id : 数据字段, 
name : 数据名称, 
alias : 数据名称首字母, 
type : 数据类型 
} 
*fn : function fn(){} 回调函数,点击生成标签的时执行的函 
*/ 
function YSelect(id,Ydata,bool,config,fn){ 
var data = []; 
Yselect_close = {}; 
var name_list = {A:[],B:[],C:[],D:[],E:[],F:[],G:[],H:[],I:[],J:[],K:[],L:[],M:[],N:[],O:[],P:[],Q:[],R:[],S:[],T:[],U:[],V:[],W:[],X:[],Y:[],Z:[],其他:[]} //新建数组,防止出现undefind 
var YDropdowns = document.getElementById(id); 
function Pretreatment(){ //处理数据 
var CatalogData = []; 
var BrandData = []; 
var china = []; 
var foreign = []; 
for (var i in Ydata) { 
if (Ydata[i][config.type] == null) 
CatalogData.push(Ydata[i][config.id]+';'+Ydata[i][config.name]+';'+Ydata[i][config.alias]) 
else 
BrandData.push(Ydata[i][config.id]+';'+Ydata[i][config.name]+';'+Ydata[i][config.alias]+';'+Ydata[i][config.type]) 
}; 
if (BrandData != "") { 
for (var i = 0 ; i < BrandData.length ; i++) { 
var str = BrandData[i].split(';') 
if (str[3] == 0) china.push(str[0] + ';' + str[1] + ';' + str[2]); 
else foreign.push(str[0] + ';' + str[1] + ';' + str[2]); 
} 
if (bool) { 
data = china; 
return data; 
}else { 
data = foreign; 
return data; 
} 
}else{ 
data = CatalogData; 
return data; //返回出数据 
} 
}; 
function jsondata(data_name,ida){ //处理Pretreatment返回出的数据 
var tit = []; //定义首字母 
var Ahtml = {A:[],B:[],C:[],D:[],E:[],F:[],G:[],H:[],I:[],J:[],K:[],L:[],M:[],N:[],O:[],P:[],Q:[],R:[],S:[],T:[],U:[],V:[],W:[],X:[],Y:[],Z:[],其他:[]}; //新建数组,防止出现undefind 
var Yselect_box = document.createElement("div"); //新建选择框父元素 
Yselect_box.id = ida+"_Yselect_box"; 
var Yselect_div = document.createElement("div"); //字母返回值的容器 
var Yselect_letter = document.createElement("p"); //26字母容器 
Yselect_letter.id = ida+'_Yselect_letter' 
var stylelink = document.createElement("style") //创建皮肤,有两套皮肤可供选择 
//stylelink.innerHTML = '#'+id+'_Yselect_box{width: 100%;position:absolute;top:30px;left:0;z-index:9999;background:#fff}#'+id+'_Yselect_box p{background: #469bde;padding:0 10px;}#'+id+'_Yselect_box p span.close{font: 16px/20px 微软雅黑;cursor:pointer;position:absolute;top:0;right:0;color:#f00}#'+id+'_Yselect_box .hide_tag{border: 1px solid #469bde;padding:5px;display: none;min-height:100px;max-height:300px;min-width:300px;max-width:800px;overflow:auto}#'+id+'_Yselect_box p a{padding:5px;line-height: 28px;color:#fff}#'+id+'_Yselect_box .hide_tag a{width:80px;display:block;text-decoration:none;padding:5px;line-height: 12px;font-size:12px;float:left;color:#444;overflow: hidden; text-overflow:ellipsis;white-space:nowrap;}#'+id+'_Yselect_box .hide_tag a:hover{background:#469bde;color:#fff;}#'+id+'_Yselect_box .cur{border-bottom: 2px solid #fac51f}'; 
stylelink.innerHTML = '#'+ida+'_Yselect_box{width: 100%;min-width:500px;max-width:800px;position:absolute;top:30px;left:0;z-index:9999;background:#fff;border:1px solid #ddd;}#'+ida+'_Yselect_box p{padding:0 10px;}#'+ida+'_Yselect_box p span.close{font: 16px/20px 微软雅黑;cursor:pointer;position:absolute;top:0;right:0;color:#666}#'+ida+'_Yselect_box .hide_tag{padding:5px 10px;display: none;min-height:50px;max-height:200px;overflow:auto}#'+ida+'_Yselect_box p a{padding:5px;line-height: 28px;color:#333;border-bottom:2px solid #bbb;font-weight:bold}#'+ida+'_Yselect_box .hide_tag a{width:80px;display:block;text-decoration:none;padding:5px;line-height: 12px;font-size:12px;float:left;color:#444;overflow: hidden; text-overflow:ellipsis;white-space:nowrap;}#'+ida+'_Yselect_box .hide_tag a:hover{background:#469bde;color:#fff;}#'+ida+'_Yselect_box a.cur{border-bottom: 2px solid #469bde;color:#469bde}'; 
for (var i = 0 ; i < data_name.length ; i++) { 
var str = data_name[i].split(';') 
tit.push(str[2].charAt(0).toLocaleUpperCase()) //判断首字母,赋值给tit 
}; 
for(var j in tit){ 
if(name_list[tit[j]]) 
name_list[tit[j]].push(data_name[j]); 
else name_list.其他.push(data_name[j]) 
} //将数据插入name_list里 
for (var k in name_list){ //处理数据,以字母分离,为空就隐藏 
if (name_list[k].length != 0) { 
for (var i = 0 ; i < name_list[k].length ; i++) { 
var allhtml = '<a href="javascript:" onclick="'+fn+'(this)" title="'+ name_list[k][i].split(';')[1] + '" name="'+ name_list[k][i].split(';')[0] + '">' + name_list[k][i].split(';')[1] + '</a>'; 
Ahtml[k] += allhtml ; 
}; 
Yselect_letter.innerHTML += '<a href="javascript:" >'+k+'</a>'; 
Yselect_div.innerHTML += '<div class="hide_tag">'+Ahtml[k]+'</div>'; 
}; 
} 
var bool = true 
Yselect_box.innerHTML = '<p id="'+ida+'_Yselect_letter'+'">'+Yselect_letter.innerHTML+'<span class="close">x</span></p>'+ Yselect_div.innerHTML; 
YDropdowns.appendChild(Yselect_box); 
YDropdowns.appendChild(stylelink); //将select插入页面 
Yselect_box.getElementsByTagName('p')[0].getElementsByTagName('span')[0].onclick = function Yselect_close(){ 
YDropdowns.removeChild(Yselect_box) 
YDropdowns.removeChild(stylelink); 
bool = false 
} //点击销毁select 
Yselect_close.close = function Yselect_close(obool){ 
if(obool){ 
YDropdowns.removeChild(Yselect_box) 
YDropdowns.removeChild(stylelink); 
bool = false 
return 
}; 
if (bool) { 
YDropdowns.removeChild(Yselect_box) 
YDropdowns.removeChild(stylelink); 
} 
} //销毁select函数 
return Yselect_close 
} 
jsondata(Pretreatment(),id) 
navlist(id) 
function navlist(ids){ //tab选项卡处理函数 
var a = document.getElementById(ids+'_Yselect_letter').getElementsByTagName('a'); 
var div = document.getElementById(ids+'_Yselect_box').getElementsByTagName('div'); 
div[0].style.display = "block" ; a[0].className = "cur"; 
for (var i = 0 ; i < a.length ; i++) { 
a[i].index = i; 
a[i].onclick = function(){ 
for (var j = 0 ; j < a.length ; j++){ 
div[j].style.display = "none"; 
a[j].className = ""; 
}; 
div[this.index].style.display = "block"; 
this.className = "cur" 
}; 
}; 
}; 
};
Javascript 相关文章推荐
javascript 对象的定义方法
Jan 10 Javascript
JS提交并解析后台返回的XML的代码
Nov 03 Javascript
JS 密码强度验证(兼容IE,火狐,谷歌)
Mar 15 Javascript
JS比较两个时间大小的简单示例代码
Dec 20 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
Aug 15 Javascript
前端微信支付js代码
Jul 25 Javascript
javascript 动态脚本添加的简单方法
Oct 11 Javascript
那些精彩的JavaScript代码片段
Jan 12 Javascript
JS设计模式之单例模式(一)
Sep 29 Javascript
详解Axios 如何取消已发送的请求
Oct 20 Javascript
Vue+Element-UI实现上传图片并压缩
Nov 26 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
Mar 04 Javascript
原生javascript实现拖动元素示例代码
Sep 01 #Javascript
使用text方法获取Html元素文本信息示例
Sep 01 #Javascript
textarea不能通过maxlength属性来限制字数的解决方法
Sep 01 #Javascript
超级好用的jQuery圆角插件 Corner速成
Aug 31 #Javascript
Html5的placeholder属性(IE兼容)实现代码
Aug 30 #Javascript
通过js为元素添加多项样式,浏览器全兼容写法
Aug 30 #Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
Aug 30 #Javascript
You might like
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
php中文件上传的安全问题
2006/10/09 PHP
PHP句法规则详解 入门学习
2011/11/09 PHP
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
我遇到的参数传递中 双引号单引号嵌套问题
2010/02/11 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
JS检测图片大小的实例
2013/08/21 Javascript
jquery 淡入淡出效果的简单实现
2014/02/07 Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
2014/04/23 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
微信小程序 this和that详解及简单实例
2017/02/13 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
js实现简单扫雷
2020/11/27 Javascript
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
轻松实现python搭建微信公众平台
2016/02/16 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
python批量修改文件编码格式的方法
2018/05/31 Python
python实现抖音点赞功能
2019/04/07 Python
python绘制多个子图的实例
2019/07/07 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
Python 操作SQLite数据库的示例
2020/10/16 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
机电专业毕业生求职信
2013/10/27 职场文书
美术国培研修感言
2014/02/12 职场文书
聚美优品励志广告词
2014/03/14 职场文书
优秀团员事迹材料1000字
2014/08/20 职场文书
初中作文评语
2014/12/25 职场文书
祝寿主持词
2015/07/02 职场文书
小学安全教育主题班会
2015/08/12 职场文书