实现可搜索仿select下拉选中
由于在优化项目中,发现先前写的一个活化石级的的可搜索下拉功能在高速搜索中会出现卡顿现象
1.起初的解决方法是在搜索事件中加入防抖函数隔一段时间才去触发他,同时搜索的不再是html文档片段,而是直接对数据做筛选,再次放入搜索的下拉容器内
<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>可搜索下拉</title>
</head> <body>
<input type="search" class="search" id="city" placeholder="输入省会或直辖市名称" />
<label class="datalist" for="city">
//搜索下拉容器
</label>
<script>
var testSearchData = [
{name:'上海',value:2205}
...
];
//数据处理函数
function datas(search){
var htmls = [];
for(var i=0 ; i<testSearchData.length ;i++){
if(testSearchData[i].name.indexOf(search)!=-1){
htmls.push(`<div class="list" data-index="${testSearchData[i].name}" data-value="${testSearchData[i].value}" >${testSearchData[i].name}</div>`);
}
}
return htmls ;
}
//防抖函数
//初始化数据填充
$(.datalist').append(htmls.join());
$('#city').keyup(function(){
var sVal = this.value || '' ;
debounce(function(sVal){
$('.datalist').append(datas(sVal).join());
})
})
//之后的选择事件省略.....PS:自由发挥 ,这段只是思维示例代码 代码可进一步优化
</script> </body> </html>
2.后来在阅读张鑫旭大大的博客时无意发现了鑫大写的一篇利用css属性利用障眼法来做可搜索下拉,相比纯JS来控制显示隐藏性能提升不少
<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>可搜索下拉</title>
</head> <body>
<input type="search" class="search" id="city" placeholder="输入省会或直辖市名称" />
<label class="datalist" for="city">
<div class="list" data-index="重庆市chongqing">重庆市</div>
<div class="list" data-index="哈尔滨市haerbing">哈尔滨市</div>
<div class="list" data-index="长春市changchun">长春市</div>
<div class="list" data-index="兰州市lanzhou">兰州市</div>
<div class="list" data-index="北京市beijing">北京市</div>
<div class="list" data-index="杭州市hangzhou">杭州市</div>
<div class="list" data-index="长沙市changsha">长沙市</div>
<div class="list" data-index="沈阳市shenyang">沈阳市</div>
<div class="list" data-index="成都市chengdu">成都市</div>
</label> <script>
var eleStyle = document.createElement("style"),
eleInput = document.querySelector("#city"); // 用来CSS控制的style插入
document.querySelector("head").appendChild(eleStyle); // 文本框输入
eleInput.addEventListener("input", function () {
var val = this.value.trim().toLowerCase();
if (val !== '') {
eleStyle.innerHTML = '.list:not([data-index*="' + this.value + '"]) { display: none; }';
} else {
eleStyle.innerHTML = '';
}
});
</script>
</body> </html>
3.还一种个人认为对性能十分不友好就阐述下大概思路
1.对于前后端不分离项目例如 php 的tp框架将下拉内容直接volist出来
2.我们可通过js控制每个属性的显示隐藏,通过内联css,将其dispaly:none; pS:因这里需要大量遍历读写DOM 个人觉得对性能损耗比较大(不推荐)
实现可搜索仿select下拉选中的更多相关文章
- select 下拉选中
<body> <select name="" id=""> <option value="">张三< ...
- 仿select下拉框
默认状态下,灰色面板出现.当点击页面按钮以及灰色面板外区域时,面板消失;点击按钮,灰色面板出现;点击灰色面板区域,面板不能消失. 主要考察:事件冒泡与取消事件冒泡. 代码: <!DOCTYPE ...
- 事件冒泡 --- 仿select下拉框
要求:点击按钮时,下拉框显示:点击页面其他部分时,下拉框消失: 1. 不靠谱代码 <!DOCTYPE html> <html> <head lang="en&q ...
- select下拉选中显示对应的div隐藏不相关的div
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- jquery操作select下拉框的各种方法,获取选中项的值或文本,根据指定的值或文本选中select的option项等
简介jquery里对select进行各种操作的方法,如联动.取值.根据值或文本来选中指定的select下拉框指定的option选项,读取select选中项的值和文本等. 这一章,站长总结一下jquer ...
- jquery操作select下拉框的多种方法(选中,取值,赋值等)
Query获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code...}); //为Sel ...
- 带搜索框的select下拉框
利用select2制作带有搜索功能的select下拉框 1.引入线上css和js <link href="https://cdnjs.cloudflare.com/ajax/libs/ ...
- LayUI中select下拉框选中触发事件
代码: var form = layui.form, layer = layui.layer; // 监听 $(document).ready(function() { // select下拉框选中触 ...
- layui select 下拉框 级联 动态赋值 与获取选中值
//下拉框必须在 class="layui-form" 里 不然监听事件没有作用 <div class="layui-form" > <div ...
随机推荐
- linux下 C程序 参数和内存
#include <stdio.h> int main(argc, argv) int argc;char *argv[]; { printf("argc=%d \n&q ...
- eclipse怎样检出SVN项目
首先确定你的eclipse安装了svn插件.查看eclipse是否安装插件的方法:打开eclipse->文件->新建->其他 ,在弹出的选择向导窗口中如果能搜索到svn,说明ecli ...
- 浮点数转byte数组
; float b=34.56745f; float c=0.0; ,,,}; byte* t=fbs; float2Bytes(t,b); unsigned int addrF=(unsigned ...
- memmove、memcpy、strcpy、memset的实现
memmove.memcpy.strcpy.memset 原型为: void *memmove( void* dest, const void* src, size_t count ); char* ...
- 《Linux多线程编程手册》读书笔记
第二章 基本线程编程 1.(P25)如果多个线程等待同一个线程终止,则所有等待线程将一直等到目标线程终止.然后,一个等待线程成功返回,其余的等待线程将失败并返回ESRCH错误. 2.(P26)将新线程 ...
- Nginx中间件使用心得(二)
一.基础知识补充 1. 历史由来补充: Nginx是俄罗斯第二大网站的开源项目. 淘宝团队发行了 tengine 增加了很多第三方的包. 2.下载相关的主键 (1)nginx下载地址 ...
- UVa 1638 Pole Arrangement (递推或DP)
题意:有高为1,2,3...n的杆子各一根排成一行,从左边能看到L根,从右边能看到R根,求杆子的排列有多少种可能. 析:设d(i, j, k)表示高度为1-i的杆子排成一行,从左边看到j根,从右边看到 ...
- 静态代码块和this
/* 静态代码块.随着类的加载而执行.而且只执行一次. 作用: 用于给类进行初始化. */class StaticCode{ static int num ; static { num = 10;// ...
- 笔记:记录两个新接触的东东- required + placeholder
1.1 required="required" 1.2 placeholder 当用户还没有输入值时,输入型控件可能通过placeholder向用户显示描述性说明文字或者提示信息, ...
- C#-流、存储
流输入输出 VS提供的类库,可方便数据的转移操作,一部分是文件和目录方面 file类 用静态方法, fileinfo类 用实例方法 dictionary类 用静态方法 dictionary ...