一个不错的仿携程自定义数据下拉选择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入门教程(7) History历史对象
Jan 31 Javascript
JavaScript中实现块作用域的方法
Apr 01 Javascript
jquery下jstree简单应用 - v1.0
Apr 14 Javascript
Javascript 垃圾收集机制介绍理解
May 14 Javascript
javascript闭包的高级使用方法实例
Jul 04 Javascript
js获得地址栏?问号后参数的方法
Aug 08 Javascript
PHP+mysql+Highcharts生成饼状图
May 04 Javascript
12种JavaScript常用的MVC框架比较分析
Nov 16 Javascript
js canvas实现适用于移动端的百分比仪表盘dashboard
Jul 18 Javascript
JS实现计算小于非负数n的素数的数量算法示例
Feb 26 Javascript
LayUI数据接口返回实体封装的例子
Sep 12 Javascript
vue循环数组改变点击文字的颜色
Oct 14 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代码
2010/08/08 PHP
如何使用PHP计算上一个月的今天
2013/05/23 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
js计算任意值之间随机数的方法
2015/01/16 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
浅谈Python的文件类型
2016/05/30 Python
Python基于tkinter模块实现的改名小工具示例
2017/07/27 Python
Python编写Windows Service服务程序
2018/01/04 Python
python3读取csv和xlsx文件的实例
2018/06/22 Python
python将txt等文件中的数据读为numpy数组的方法
2018/12/22 Python
python实现Flappy Bird源码
2018/12/24 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
几道PHP面试题
2013/04/14 面试题
如何清空Session
2015/02/23 面试题
上班打牌检讨书
2014/02/07 职场文书
行政求职信
2014/07/04 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
2015年女职工工作总结
2015/05/15 职场文书
Python趣味挑战之给幼儿园弟弟生成1000道算术题
2021/05/28 Python
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技