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

这是一个仿携程自定义的数据下拉选择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"
};
};
};
};
(0)

相关推荐

  • input+select(multiple) 实现下拉框输入值

    于是尝试了用input+select来实现,结果如下: 具体代码及演示地址:www.homdian.com/test.aspx 这种方法其实是在下拉框上压一个文本框,能够实现输入,也能够实现下拉框的选择.但根据输入值用用异步的方式绑定下拉框选项时, 无法展开下拉框,到网上找了段代码: 复制代码 代码如下: document.form1.ddlMovName.focus(); var WshShell = new ActiveXObject("Wscript.Shell"); try{

  • js实现Select下拉框具有输入功能的方法

    本文实例讲述了js实现Select下拉框具有输入功能的方法.分享给大家供大家参考.具体实现方法如下: 实现方法一 复制代码 代码如下: <HTML> <HEAD> <META http-equiv='Content-Type' content='text/html; charset=gb2312'> <TITLE>js实现可输入的下拉框</TITLE> </HEAD> <BODY> <div style="

  • jQuery实现非常实用漂亮的select下拉菜单选择效果

    本文实例讲述了jQuery实现非常实用漂亮的select下拉菜单选择效果.分享给大家供大家参考,具体如下: 先来看如下运行效果截图: 在线演示地址如下: http://demo.jb51.net/js/2015/js-select-chose-style-menu-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtm

  • JS实现的5级联动Select下拉选择框实例

    本文实例讲述了JS实现的5级联动Select下拉选择框.分享给大家供大家参考.具体如下: 这是一个基于JS的5级联动Select下拉选择框,这里演示的仅是一个示例,没有做汉化,当初从老外网站扒下时花了很多时间,当然我们平时用时候可能不需要这么多级,意在介绍一种编写方法和思路,希望大家喜欢. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-select-5-option-codes/ 具体代码如下: <title>一个基于JS的5级联动Se

  • js自动查找select下拉的菜单并选择(示例代码)

    复制代码 代码如下: function find_select(name){ var select = document.getElementsByName(name); var find_str = document.getElementById('to_find_str').value; if(select) {  select = select[0];  var child = select.childNodes;  var can=false,text='',len=child.leng

  • jquery取消选择select下拉框示例代码

    有三个select下拉框一个大类,两个小类隐藏,需要在选择大类的时候,小类显示同时清除另外的小类选择的项这需求有点儿.......... 下面是三个select: 复制代码 代码如下: <select name="pWaqqqy" id="sel_type" onchange="selectFunction()">        <option value="">全部</option>   

  • 基于jQuery实现select下拉选择可输入附源码下载

    我们知道,一般select下拉框是只能选择的,不能用来输入内容的.而有时我们会遇到下拉框中没有要选择的信息项或者下拉选项特别多时,我们可以让select变成text,允许用户输入想要的内容,同时还可以在输入的时候将包含关键字的项也列出来,供快速选择. 查看演示效果           源码下载 本文将用实例和大家分享一款基于jQuery的下拉框插件,它允许用户输入内容,同时下拉选项中会及时匹配相关选项,支持键盘操作,还支持html选项内容,当然还能让下拉的过程带有动画效果.我们来看下如何使用.

  • asp select下拉菜单选择图标并实时显示

    静态方法:将下面的代码复制到<body>~</body>内 程序代码 <table cellpadding="2" width="226" cellspacing="2" border="0" > <tr> <td width="32" align="right"><img id=idface src="....

  • select下拉选择框美化实现代码(js+css+图片)

    因为虽然实现起来麻烦点,如果用自带的Select,很简单的就完成了,但是本代码实际上是在向大家讲述一种Js在网页中的应用实战,多种元素之间的配合作用等.效果如下图: 下拉select选择框 body{margin:20px auto;font-family:Arial,Helvetica,sans-serif;font-size:12px;width:950px;height:400px;border:solid 1px #aaa;position:relative;padding:10px;}

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

    这是一个仿携程自定义的数据下拉选择select,对一些比较重要的参数进行的描述,方便初学者 /* *id : id 当前插件的父元素 *data : json 选择的数据(json格式) *bool : true/false data数据如果要分离成两个 值为true *config : 配置data的内部对象(type在bool为true的时候生效) { id : 数据字段, name : 数据名称, alias : 数据名称首字母, type : 数据类型 } *fn : function

  • js 自定义个性下拉选择框示例

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&qu

  • vue仿携程轮播图效果(滑动轮播,下方高度自适应)

    先看案例,使用vue+swiper实现,slide不同高度时,动态计算盒子高度,让其下方高度自适应的效果 首先搭建vue项目,这里不做过多说明,然后安装swiper npm install swiper --save-dev 1. js部分:初始化swiper组件,vue要在mounted生命周期中进行初始化,代码如下: import Swiper from 'swiper' import { TweenMax, Power2 } from 'gsap' 初始化时调用resize函数,计算屏幕容

  • Flutter实现自定义下拉选择框的示例详解

    在一些列表页面中,我们经常会有上方筛选项的的需求,点击出现一个下拉菜单,多选.单选.列表选等,而在Flutter中,并没有现成的这样的组件,找第三方的扩展有时候又会受到一定限制,所以最好我们可以自己做一个,这样即使扩展我们也会得心应手. 先看效果图: 关键点:弹出.收回动画.状态改变.选项联动 思路: 我们可以看到一个完整的下拉框有头部和具体的下拉选项两部分组成,头部又和下拉组进行了联动, 把头部当做1个数组,下方选项作为1个数组,两个数组数量一致之间形成一个完整的下拉选择框可以更好的控制联动效

  • 使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效

    这是一款仿windows10开始菜单的下拉导航菜单特效.该下拉菜单使用jQuery和CSS3来完成类似windows10开始菜单样式效果,它的代码简洁,效果非常时尚. 查看演示      源码下载 该下拉菜单的HTML结构非常简单,基本的HTML结构如下: <div id="top-bar" class="top-bar"> <div class="bar"> <button id="navbox-trig

  • uniapp 仿微信的右边下拉选择弹出框的实现代码

    在百度找了很多 没有找到满意的 这里根据自己的需求 抽取一个组件 这个组件主要是包括搜索框和右边菜单点击弹出一个下拉筛选菜单 这里首先用一个单独的页面存放这个组件 <template> //这里是搜索框的输入框 不需要的可以删掉 <view> <view class="arrivalSearch"> <view class="arrivalSmallsearch"> <view class="arriv

  • Vue中el-form标签中的自定义el-select下拉框标签功能

    页面写死el-select下拉框标签: 通过v-for="item in stateArr"绑定,stateArr声明在Vue组件里面的data参数里面代码如下: 到此这篇关于Vue中el-form标签中的自定义el-select下拉框标签功能的文章就介绍到这了,更多相关Vue el-form标签 自定义el-select下拉框标签内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

  • uni-app实现数据下拉刷新功能实例

    目录 uni-app数据下拉刷新 附:uni.startPullDownRefresh(OBJECT) 总结 uni-app上拉加载更多功能:https://www.jb51.net/article/257733.htm uni-app数据下拉刷新 在 pages.json 配置文件中,为当前的 goods_list 页面单独开启下拉刷新效果: "subPackages": [{ "root": "subpkg", "pages&quo

  • Android仿新浪微博自定义ListView下拉刷新(4)

    自定义PullToRefreshListView继承ListView,在ListView头部添加一个下拉的头部布局.跟ListView用法完全一致. 该自定义Listview代码详解具体可参考: http://www.jb51.net/article/97845.htm 此处详细介绍Adapter的详细代码. 1.首先给Adapter绑定ListView布局. 2.其次创建一个层次对应组件的类,将对应的组件和对象进行关联,提高效率. 3.然后跟陆获得的图片路径异步下载图片,由于不知道该微博图片的

  • Android仿QQ好友详情页下拉顶部图片缩放效果

    本文实例为大家分享了Android下拉顶部图片缩放效果展示的具体代码,供大家参考,具体内容如下 效果图 效果分析 1 向下滑动,头部的图片随着手指滑动不断变大 2 向上滑动,不断的向上移动图片,直到图片不可见 3 当顶部图片不可见时,向上滑动,滑动ListView 实现思路 1 由于这个View分上下两部分,垂直排列,可以通过继承LinearLayout实现::自定义一个DragImageView,该View继承LinearLayout public DragImageView(Context

随机推荐