|
【web前端】可筛选[输入搜索]的select(重写)
--- filterSelect.js
/**
* 将Select转变为支持输入内容对Select的Option进行筛选的js
* @author wanghq
* @Date 2017年12月4日 18:38:29
* var $select = $("select["+TriangleDefinition.HTML_DEF_ATTR_KEY_FILTER_SELECT+"]").filterSelect();
$(selectDOMRouteProcess).filterSelectReloadOption();// 把selectDOMRouteProcess变为可filterSelect
*/
$(document).ready(function(){
// 这段代码,是遍历所有拥有 TriangleDefinition.HTML_DEF_ATTR_KEY_FILTER_SELECT 属性的元素,并把他们变为可编辑
if($("select["+TriangleDefinition.HTML_DEF_ATTR_KEY_FILTER_SELECT+"]").length > 0){
$("select["+TriangleDefinition.HTML_DEF_ATTR_KEY_FILTER_SELECT+"]").filterSelect();
}
});
/**
* 将Select转化为FilterSelect
*/
$.fn.filterSelect = (function(){
return function(){
var $body = $("body");
this.each(function(i, v){
if($(v).parent().is("div") && $(v).parent().attr("class") == "m-input-select"){
return false;// 如果当前Select已经是FilterSelect,则退出.
}
var $sel = $(v);// 得到Select的DOM
var $div = $('<div class="m-input-select" style="width:'+$sel.width()+'"></div>');//生成覆盖层的DIV,宽度等于原Select宽度
var $input = $("<input type='text' class='m-input' />");
// var $wrapper = $("<div class='m-list-wrapper'><ul class='m-list'></ul></div>");
var $wrapper = $("<ul class='m-list'></ul>");
$div = $sel.wrap($div).hide().addClass("m-select").parent();
$div.append($input).append("<span class='m-input-ico'></span>").append($wrapper);
// 遮罩层显示 + 隐藏
var wrapper = {
show: function(){
$wrapper.show();
this.$list = $wrapper.find(".m-list-item:visible");
this.setIndex(this.$list.filter(".m-list-item-active"));
this.setActive(this.index);
},
hide: function(){
$wrapper.hide();
},
next: function(){
return this.setActive(this.index + 1);
},
prev: function(){
return this.setActive(this.index - 1);
},
$list: $wrapper.find(".m-list-item"),
index: 0,
$cur: [],
setActive: function(i){
// 找到第1个 li,并且赋值为 active
var $list = this.$list, size = $list.size();
if(size <= 0){
this.$cur = [];
return;
}
$list.filter(".m-list-item-active").removeClass("m-list-item-active");
if(i < 0){
i = 0;
}else if(i >= size){
i = size - 1;
}
this.index = i;
this.$cur = $list.eq(i).addClass("m-list-item-active");
this.fixScroll(this.$cur);
return this.$cur;
},
fixScroll: function($elem){
// console.log($wrapper);
var height = $wrapper.height(), top = $elem.position().top, eHeight = $elem.outerHeight();
var scroll = $wrapper.scrollTop();
// 因为 li 的 实际 top,应该要加上 滚上 的距离
top += scroll;
if(scroll > top){
$wrapper.scrollTop(top);
}else if(top + eHeight > scroll + height){
// $wrapper.scrollTop(top + height - eHeight);
$wrapper.scrollTop(top + eHeight - height);
}
},
setIndex: function($li){
if($li.size() > 0){
this.index = this.$list.index($li);
$li.addClass("m-list-item-active").siblings().removeClass("m-list-item-active");
}else{
this.index = 0;
}
}
};
// input 的操作
var operation = {
// 文字更变了,更新 li, 最低效率的一种
textChange: function(){
val = $.trim($input.val());
$wrapper.find(".m-list-item").each(function(i, v){
if(v.innerHTML.indexOf(val) >= 0){
$(v).show();
}else{
$(v).hide();
}
});
wrapper.show();
},
// 设值
setValue: function($li){
if($li && $li.size() > 0){
var val = $.trim($li.html());
$input.val(val).attr("placeholder", val);
$input.attr("title", val);
wrapper.setIndex($li);
$sel.val($li.attr("data-value")).trigger("change");
}else{
$input.val(function(i, v){
return $input.attr("placeholder");
});
};
wrapper.hide();
this.offBody();
},
onBody: function(){
var self = this;
setTimeout(function(){
self.offBody();
$body.on("click", self.bodyClick);
}, 10);
},
offBody: function(){
$body.off("click", this.bodyClick);
},
bodyClick: function(e){
var target = e.target;
if(target != $input[0] && target != $wrapper[0]){
wrapper.hide();
operation.setValue();
operation.offBody();
}
}
};
// 遍历 $sel 对象
function resetOption(){
var html = "", val = "", defVal = "";
$sel.find("option").each(function(i, v){
if(i == 0){
defVal = v.text;
}
if(v.selected){
val = v.text;
};
html += '<li class="m-list-item'+ (v.selected ? " m-list-item-active" : "") +'" data-value="'+ v.value +'" title="'+ v.text +'">'+ v.text +'</li>';
});
if(val.length == 0 ){
val = defVal;
}
$input.val(val);
$input.attr("title", val);
$input.attr("placeholder", val);
$wrapper.html(html);
};
$sel.on("optionChange", resetOption).trigger("optionChange");
$sel.on("setEditSelectValue", function(e, val){
// console.log(val);
var $all = $wrapper.find(".m-list-item"), $item;
for(var i = 0, max = $all.size(); i < max; i++){
$item = $all.eq(i);
if($item.attr("data-value") == val){
operation.setValue($item);
return;
}
}
});
// input 聚焦
$input.on("focus", function(){
this.value = "";
operation.textChange();
operation.onBody();
}).on("input propertychange", function(e){
operation.textChange();
}).on("keydown", function(e){
// 上 38, 下 40, enter 13
switch(e.keyCode){
case 38:
wrapper.prev();
break;
case 40:
wrapper.next();
break;
case 13:
operation.setValue(wrapper.$cur);
break;
}
});
$div.on("click", ".m-input-ico", function(){
// 触发 focus 和 blur 事件
// focus 是因为 input 有绑定
// 而 blur,实际只是失去焦点而已,真正隐藏 wrapper 的是 $body 事件
$wrapper.is(":visible") ? $input.blur() : ($input.val("").trigger("focus"));
});
// 选中
$wrapper.on("click", ".m-list-item", function(){
operation.setValue($(this));
return false;
});
setTimeout(function(){
// for ie
wrapper.hide();
}, 1)
});
return this;
};
})();
/**
* 更新当前FilterSelect的Option
*/
$.fn.filterSelectReloadOption = (function(){
return function(){
this.each(function(i, v){
var $div = $(v).parent();
if($div.is("div") && $div.attr("class") == "m-input-select"){
var $sel = $(v);// 得到Select的DOM
var $input = $div.find(":text[class='m-input']");
var $wrapper = $div.find("ul[class='m-list']");
$wrapper.empty();
var html = "", val = "", defVal = "";
$sel.find("option").each(function(i, v){
if(i == 0){
defVal = v.text;
}
if(v.selected){
val = v.text;
};
html += '<li class="m-list-item'+ (v.selected ? " m-list-item-active" : "") +'" data-value="'+ v.value +'" title="'+ v.text +'">'+ v.text +'</li>';
});
if(val.length == 0 ){
val = defVal;
}
$input.val(val);
$input.attr("title", val);
$input.attr("placeholder", val);
$wrapper.html(html);
}
});
return this;
};
})();
-- filterSelect.css .m-input-select { display: inline-block;
*display: inline;
position: relative;
-webkit-user-select: none;
}
.m-input-select ul, .m-input-select li {
padding: 0;
margin: 0;
}
.m-input-select .m-input {
padding-right: 22px;
}
.m-input-select .m-input-ico {
position: absolute;
right: 0;
top: 0;
width: 22px;
height: 100%;
background:
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAATElEQVQoU2NkIBEwkqiegTwNcXFx/4m1CW4DMZoWLVrEiOIkfJpAikGuwPADNk0wxVg1gASRNSErxqkBpgldMV4NuEKNvHggNg5A6gBo4xYmyyXcLAAAAABJRU5ErkJggg==)
no-repeat 50% 50%;
}
.m-input-select .m-list-wrapper {
}
.m-input-select .m-list {
display: none;
position: absolute;
z-index: 1;
top: 100%;
left: 0;
right: 0;
max-width: 100%;
max-height: 250px;
overflow: auto;
border-bottom: 1px solid #ddd;
}
.m-input-select .m-list-item {
color: black;
cursor: default;
padding: 5px;
margin-top: -1px;
list-style: none;
background: #fff;
border: 1px solid #ddd;
border-bottom: none;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.m-input-select .m-list-item:hover {
background: #2D95FF;
}
.m-input-select .m-list-item-active {
background: #2D95FF;
}
|
相关推荐
DMTF相关协议(一):Redfish和SMBIOS
Redfish 是一种管理标准,使用超媒体 RESTful 接口中的数据模型表示。该模型以标准的、机器可读的模式表示,消息的有效负载以 JSON 表示。该协议本身利用了 OData v4。由于它是一个超媒体 API,因此能够通过一致的接口表示各种实现。它具有管理数据中心资源、处理事件、长时间任务和发现的机制。
HTML下拉搜索,select筛选搜索
jQuery实现下拉搜索 点击输入框显示所有option option选项可滚动,已隐藏滚动条 输入框动态监听并筛选option <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>下拉搜索</title> <script src="http://libs.baidu.com/jquery/1.9.1/jquery.m
基于轻量级神经网络MobileNet V2的水果识别种类算法研究
本文阐述了一种基于轻量级卷积神经网络MobileNet V2的水果分类与识别算法研究。为了最大限度地促进机械收获,需要一个检测系统,它可以让我们识别不同类别的水果。一个相对未开发的想法是使用深度学习和人工智能算法,不仅可以检测水果的种类,还可以检测水果是否成熟。这可以证明是有利可图的,因为它可以提供作物生长状况以及成熟和未成熟果实的个体数量,以及决定是否是收获时间的有用信息。第一步对数据进行了预处理,数据预处理技术在众多的深度学习计算中起到了重要作用。
html下拉选择框可筛选,jQuery+css3下拉选择框
豌豆 12019/7/19 9:43:10js稍微优化了一下,作者的JS不能多个一起使用$(function(){$(".select").each(function(){varf_this=$(this);var_p=f_this.children('p')$(this).children().click(function(e){f_this.toggleClass('open...
sdio wifi 移植
介绍 简单来说,sdio起源自sd标准,顾名思义就是sd的IO接口(interface)的意思,更具体的说明,sd本来是记忆卡的标准,但是现在也可以把SD卡拿来插上一些外围设备接口使用,这个就是就叫做sdio。 而且sdio本身是一种相当单纯的技术,通过sd的IO引脚来连接外部外围,并且通过sd的IO数据接位与外围传输数据,而且sd协会也推出很完整的sdio stack 驱动程序,使得sdio外围得开发与应用变得非常热门 这里我们要移植的是RTL8822cs的sdio WiFi 模块,将其移植到rk3
别再为H桥烧MOS管发愁了!手把手教你用IR2104搭建稳定电机驱动(附自举电路详解)
本文详细解析了使用IR2104半桥驱动芯片构建高可靠H桥电机驱动电路的全过程。从芯片内部架构、自举电路原理到PCB布局技巧和实战调试方法,帮助工程师彻底解决MOS管烧毁问题。重点讲解了自举电容选型、死区时间控制等关键设计要点,并附有示波器实测波形分析,是电机驱动设计的实用指南。
Select增加搜索功能
select增加搜索功能
使用RustDesk或者AnyDesk的TCP隧道实现Codesys系列PLC的远程调试和下载
Codesys远程调试
【web前端】可筛选[输入搜索]的select
基于jquery, 带筛选,可搜索的 select 插件。与 select 元素无缝结合,最大程度上,保证 select 的原生性。兼容 ie7 及 以上浏览器
Python 爬虫反爬突破:浏览器指纹深度伪装技术
在当前网络安全与反爬虫技术日趋成熟的环境下,传统的请求头伪装、IP 代理已无法满足复杂站点的爬虫需求。浏览器指纹作为网站识别爬虫、区分真实用户与自动化程序的核心技术,成为爬虫进阶必须突破的关键壁垒。浏览器指纹通过采集浏览器环境、硬件信息、渲染特性等多维数据生成唯一标识,即使更换 IP、清除 Cookie,网站仍可精准识别爬虫程序。本文聚焦浏览器指纹深度伪装技术,从指纹生成原理、核心指纹类型、Python 实现方案、高匿伪装实战到风控绕过策略,全方位讲解浏览器指纹的突破方法。Selenium 官方文档。
uniapp ios原生插件开发 (framework,cocoapods)
已知UniApp的插件开发方式有两种, 第一种 Xcode Framework的方式,这种方式是官方指定的方式。 这种方式的优点就是简单直接, 但也有不足,比如当插件需要引入一些三方库时,操作起来就不是那么方便。 而使用Cocoapods则可以很方便的引入三方库。 接下来,本文探索使用Cocoapods的方式来进行UniApp插件开发。
可输入筛选复选框select2组件的使用
select2详细介绍与相关文件的下载可以参考 http://select2.github.io/select2/ select2组件效果 效果图如下: 即支持多选,支持根据输入进行相似查询,支持值初始化,使用及其方便。 1 下载(http://select2.github.io/select2/)并引入相关的文件,包括jquery和select2的文件 <script t...
13、Java 中 MQTT 异步通知与回调的使用及传感器命令处理
本文详细介绍了在 Java 中使用 MQTT 的异步通知与回调机制,并展示了如何通过 Paho Java 客户端处理与传感器交互的命令。文章包含代码示例,讲解了 MQTT 客户端的连接、订阅、消息处理以及模拟传感器数据发布的过程,适用于希望在 Java 应用中实现 MQTT 通信与设备控制的开发者。
3步实现Layui Select组件拼音首字母搜索的终极指南
在日常Web开发中,面对城市选择、姓名筛选等中文选项较多的场景,你是否也曾为繁琐的滚动查找而烦恼?当用户需要从上百个城市选项中找到"北京"时,传统的中文输入搜索方式效率低下,体验不佳。本文将为你详细解析如何通过简单三步,为Layui Select组件添加拼音首字母搜索功能,彻底解决这一痛点。 ## 痛点分析:为什么需要拼音搜索? 想象一下这样的场景:一个电商平台的收货地址选择,包含全国300多
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
【亲测免费】 Vue-Search-Select:智能与高效的前端筛选组件
Vue-Search-Select:智能与高效的前端筛选组件 是一个基于 Vue.js 的强大选择器组件,适用于需要进行模糊搜索和筛选功能的网页应用。它将简单的下拉列表与高效搜索引擎相结合,为用户提供了一种交互友好且响应迅速的选择体验。 技术分析 Vue-Search-Select 利用了 Vue.js 的数据绑定和组件化特性,使得该组件能够无缝融入你的 Vue 应用中。其核心功能包括: 实时模...
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
AI一键生成xm-select多选组件?快马平台让前端开发更高效
最近在做一个电商后台的商品筛选系统,需要实现一个多选下拉框功能,支持用户从大量分类中快速选择多个标签。经过一番调研,我发现了xm-select这个轻量级的多选下拉框组件,它完美契合我的需求。本文将分享如何快速实现一个功能完善的xm-select多选组件,以及我在使用。实际使用下来,从描述需求到看到运行效果,整个过程不超过5分钟。上描述你的需求,体验AI生成代码的便捷。整个过程无需配置环境,生成的代码可以直接运行和调整,对前端开发者来说确实是个效率利器。,我只需要简单描述需求,AI就能生成完整的实现代码。
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
3步实现React-Select高级过滤:从基础到业务级搜索逻辑
在现代Web应用中,下拉选择框(Select)是收集用户输入的核心组件之一。但面对复杂业务场景——如多条件筛选、模糊匹配、动态数据过滤时,原生HTML的``标签往往力不从心。React-Select作为React生态中最受欢迎的选择框组件,提供了强大的自定义过滤能力,让开发者能够轻松实现从简单搜索到复杂业务规则的各种需求。本文将通过实际代码示例,带你掌握如何定制React-Sele...
BootstrapBlazor下拉搜索框:Select组件搜索功能完全指南
BootstrapBlazor Select组件是一款功能强大的下拉搜索框解决方案,它将传统下拉选择与实时搜索功能完美结合,帮助用户在大量选项中快速找到所需内容。无论是构建管理系统还是数据录入界面,这个组件都能显著提升用户体验和操作效率。 ## 为什么选择BootstrapBlazor Select组件? 在现代Web应用中,用户经常需要从大量选项中进行选择。传统的下拉框在面对数十甚至上百个选
html5 input select,【Web前端问题】select如何实现既可以像input那样支持输入,又可以从下拉中选择? antd...
不可以多选,使用tags属性的时候会支持多选,希望能够保存自己输入的内容,网上找的答案说是用combobox跟tabIndex={0}这两个属性,试了下是不起作用的,我当前用的antd版本是3.15.0的,请问有遇到这问题的吗回答:为什么不用AutoComplete?回答:真的要使用select组件的话,也可以不用改造组件实现,配合showSearch以及onSearch:const {searc...
Jellium Desktop媒体标签搜索教程:掌握高效内容筛选的终极技巧
Jellium Desktop作为一款非官方的Jellyfin桌面客户端,提供了强大的媒体管理与播放功能。本文将详细介绍如何利用其标签搜索功能快速定位和筛选媒体内容,帮助用户轻松管理个人媒体库。 ## 认识Jellium Desktop的媒体标签系统 Jellium Desktop通过标签系统对媒体内容进行分类管理,这些标签通常包括内容类型、格式、分辨率等关键信息。在客户端的Web界面中,标签
js,JQuery实现,带筛选,搜索的select
代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>网上找了个插件,但是不好用</title> <script src="jquery.js" charset="utf-8"></script&g...
脱机数据的排序、搜索和筛选
1. DataTable类的搜索和筛选功能l 根据主键值查找行DataRowCollection类的Find方法,接受包含要查找行的主键值为参数,因为是根据主键值查找,所以仅返回一个DataRow。DataTable tbl=new DataTable(“Customers”);da.Fill(tbl);tbl.PrimaryKey=new DataCol
Web3UIKit实战案例:构建一个完整的NFT市场前端应用
Web3UIKit是一套轻量级且可复用的Web3 UI组件库,专为去中心化应用(dapps)设计。本教程将带你通过实战案例,了解如何利用Web3UIKit快速构建一个功能完善的NFT市场前端应用,即使你是Web3开发新手也能轻松上手。 ## 📋 准备工作:环境搭建与依赖安装 在开始构建NFT市场之前,我们需要先准备开发环境并安装必要的依赖。 ### 1. 克隆项目仓库 首先,克隆Web3
select2~给下拉选框增加搜索框插件
功能作用 给下拉框增加搜索框,支持本地或远程的动态搜索,非常好用哦 功能展示 原始的搜索框 使用了Select2之后 官网推荐 http://select2.github.io/select2/ 里面有超多超详细的案例哦 入门用例 官网已经有很详细的案例,建议看官网。 1、引入jq、select.css和select.js <link rel="stylesh...
终极Bootstrap-select语义化搜索实战指南:让下拉框秒懂你的心思
在当今Web开发中,用户体验是决定项目成功的关键因素之一。Bootstrap-select作为一款功能强大的jQuery插件,将传统的HTML选择框(select元素)带入21世纪,提供了智能搜索、多选功能和现代化的界面设计。通过语义化搜索功能,它能让下拉框真正理解用户意图,实现快速精准的选择体验。 ## 🔍 什么是Bootstrap-select语义化搜索? Bootstrap-selec
Bootstrap Blazor Select组件:打造高效搜索下拉框的终极指南
Bootstrap Blazor Select组件是一款基于Blazor的企业级UI组件库中的核心搜索选择器,它完美融合了传统下拉框与智能搜索功能,为用户提供流畅的数据选择体验。无论您是构建后台管理系统、数据录入界面还是复杂的筛选表单,这个组件都能显著提升用户操作效率。 ## 为什么需要智能搜索下拉框? 🤔 在传统Web应用中,用户面对包含数十甚至上百个选项的下拉框时,常常需要滚动查找,操作
2268



被折叠的 条评论
为什么被折叠?



