一个不错的仿携程自定义数据下拉选择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参数的小问题
Mar 02 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
Jan 23 Javascript
JQuery给网页更换皮肤的方法
May 30 Javascript
javascript下拉列表菜单的实现方法
Nov 18 Javascript
js实现微信分享代码
Oct 11 Javascript
FullCalendar日历插件应用之数据展现(一)
Dec 23 Javascript
angular.extend方法的具体使用
Sep 14 Javascript
利用nginx + node在阿里云部署https的步骤详解
Dec 19 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
Jun 29 Javascript
layer ui插件显示tips时,修改字体颜色的实现方法
Sep 11 Javascript
详解JavaScript自定义函数
Jul 29 Javascript
JS前端监控采集用户行为的N种姿势
Jul 23 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
php+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
MySQL数据源表结构图示
2008/06/05 PHP
php输出xml格式字符串(用的这个)
2012/07/12 PHP
解析strtr函数的效率问题
2013/06/26 PHP
基于php实现的验证码小程序
2016/12/13 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
让图片跳跃起来  javascript图片轮播特效
2016/02/16 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
Avalonjs 实现简单购物车功能(实例代码)
2017/02/07 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
详解webpack + react + react-router 如何实现懒加载
2017/11/20 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
微信小程序返回上一页传参并刷新过程解析
2019/12/13 Javascript
详解elementUI中input框无法输入的问题
2020/04/27 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
入职担保书范文
2014/05/21 职场文书
开展党的群众路线教育实践活动工作总结
2014/11/05 职场文书
稽核岗位职责
2015/02/10 职场文书
500字小学生检讨书
2015/02/19 职场文书
工作年限证明模板
2015/06/15 职场文书