实现可搜索仿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 ...
随机推荐
- 【JDBC】jdbc原理总结
1 什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库 ...
- android 网站上下的 adt 不能显示没有安装的
问题描述 使用SDK Manager更新时出现问题Failed to fetch URL https://dl-ssl.google.com/android/repository/repository ...
- 2018.09.17 atcoder Tak and Hotels(贪心+分块)
传送门 一道有意思的题. 一开始想错了,以为一直lowerlowerlower_boundboundbound就可以解决询问,结果交上去TLE了之后才发现时间复杂度是错的. 但是贪心思想一定是对的,每 ...
- 2018.09.01 loj#2330. 「清华集训 2017」榕树之心(树形dp)
传送门 树形dp好题啊. 我们用w[i]" role="presentation" style="position: relative;">w[ ...
- Linux IPC之共享内存
System V共享内存机制: shmget shmat shmdt shmctl 原理及实现: system V IPC机制下的共享内存本质是一段特殊的内存区域,进程间需要共享的数据被放在该共 ...
- 百度上传插件 WebUploader初始使用
引入资源 使用Web Uploader文件上传需要引入三种资源:JS, CSS, SWF. <!--引入CSS--> <link rel="stylesheet" ...
- (动态规划 01背包 打印路径) CD --UVA --624
链接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87813#problem/G 每个CD的时间不超过 20没有哪个CD的时间是超过N ...
- hdu 4995 离线处理+模拟
http://acm.hdu.edu.cn/showproblem.php?pid=4995 给定一维坐标下的n个点,以及每个点的权值,有m次查询,每次将查询的x点上的权值修改为离x最近的k个点权值的 ...
- Flash CC2015软件安装教程
FLCC2015/64位下载地址: 链接:https://pan.baidu.com/s/1c1WoTTu 密码:k4hn 软件介绍: Flash是一种动画创作与应用程序开发于一身的创作软件.Flas ...
- 层层递进Struts1(三)之Struts组成
这篇博客我们来说一下Struts的主要组成我们,通过前几篇博客,我们知道这个框架最重要的几个步骤:获取路径.封装表单.获取转向列表.转向逻辑处理.转向,与此对应的是:ActionServlet.Act ...