下拉多选框的实现

2023-05-16

这两天在写一个chrome插件,需要在popup页使用下拉多选框。用select看起来非常原始,多选还要按住ctrl键或者command键。
html代码如下:

<html>
    <head>
        <title>用select实现下拉多选框</title>
    </head>
    <body>
        <select class="demo" multiple="multiple">  
            <option value="cp">C++</option>  
            <option value="cs">C#</option>  
            <option value="oc">Object C</option>  
            <option value="c">C</option>  
        </select> 
    </body>
</html>

效果如下,真是。。。

看来必须要有css的加持,否则真是不堪入目。但是买的《CSS揭秘》一页还没看,远水解不了近渴。先在网上找找吧。
在free.js上找到了一个好方法。鉴于自己对html/css和jQuery只是一知半截,认真看了一遍free.js提供的代码,也算是学习了css和jQuery的实战用法。
先看下效果,一样的select,不一样的味道。css和jquery真是能化腐朽为神奇啊。

在这里插入图片描述
html代码:

<html>
    <head>
        <link href="fSelect.css" rel="stylesheet" type="text/css">
        <title>用select+css实现下拉多选框</title>
    </head>
    <body>
        <select class="demo" multiple="multiple">  
            <optgroup label="Languages">  
                <option value="cp">C++</option>  
                <option value="cs">C#</option>  
                <option value="oc">Object C</option>  
                <option value="c">C</option>  
            </optgroup>  
            <optgroup label="Scripts">  
                <option value="js">JavaScript</option>  
                <option value="php">PHP</option>  
                <option value="asp">ASP</option>  
                <option value="jsp">JSP</option>  
            </optgroup>  
        </select>  

        <script src="jquery-1.11.3.min.js"></script>
        <script src="fSelect.js"></script>
        <script>
        $(function() {
                $('.demo').fSelect();
            });
        </script>
    </body>
</html>

这里除了用到了select的multiple属性,还用到了optgroup属性。这个属性能将option分组。
除此之外,我们在html中还加了新的调料:css和jquery。
jquery和fSelect.js改变了html的样子。脚本执行后的html是这个样子的:

在这里插入图片描述
那么,我们怎么施了魔法,把html变了样呢?
先从入口说起吧。在前的

  $(function() {
        $('.demo').fSelect();
    });

这里用了两个简写,一个是 ( . . . ) 是 j Q u e r y ( . . . ) 的 简 写 。 另 一 个 简 写 是 (...)是jQuery(...)的简写。另一个简写是 (...)jQuery(...)(function() {…});,它的全写形式是:

$(document).ready(function(){...})

ready函数能保证在页面就绪后再调用我们写的匿名函数。其实这有点多此一举,因为这个函数已经是紧挨着之前了,函数的位置可以保证脚本运行前HTML已经加载到DOM里面。
剥开这个函数,可以看到核心代码是KaTeX parse error: Expected 'EOF', got '#' at position 396: …lor_FFFFFF,t_70#̲pic_center) 主函数…) {…})(jQuery)。这又是一种惯用法,定义一个匿名函数(函数参数是 , 其 实 就 是 j Q u e r y ) , 然 后 马 上 调 用 这 个 匿 名 函 数 。 这 个 函 数 的 作 用 是 把 一 些 自 定 义 的 函 数 和 属 性 注 入 到 j q u e r y 或 者 D O M 里 面 。 第 三 行 ,其实就是jQuery),然后马上调用这个匿名函数。这个函数的作用是把一些自定义的函数和属性注入到jquery或者DOM里面。 第三行 jQueryjqueryDOM.fn.fSelect = function(options) {…}就是给KaTeX parse error: Expected 'EOF', got '#' at position 262: …lor_FFFFFF,t_70#̲pic_center) 第21…select,属性名有点奇怪,这是jquery的习惯用法,为保存jquery对象的变量都以$开头。
让我们再看下原型方法create。顺便说下,原型在js有非常大的作用,通过原型可以实现继承,动态增删属性,改变对象行为。
回到create:

32行-33行,是把select包到一个新的div里面。因为html定义的select带有multiple属性,这个div属于两个class(fs-wrap和multiple)。
34行:在select之前插入两个div(类分别为fs-label-wrap和fs-lable)和一个span(类为fs-arrow)。
35行:再在select之前插入两个div(类分别为fs-dropdown hidden和fs-options)。这两个div比34行加的两个div更靠近select*。
36行:select加入到类hidden,把select整个元素都设置为不可见。
37行:又定义一个jquery变量,$wrap,保存当前select 的第一个类为fs-wrap**的祖先元素。
38行:调用另一个原型方法reload。
reload:
43-47行:在类fs-dropdown(一个div)的开始标签之后插入一个用于搜索的div(类为fs-search)。
48行:根据select的options,生成用div实现的新choices。
49行:把新生成的choices插入到fs-options类的div中。
50行:调用reloadDropdownLabel,将用户选中的options更新到fs-label中,并触发select的change事件。
让我们再看看option的点击事件响应:

在这里插入图片描述
159-174行:把选中的options保存到selected数组中。
176行:根据selected,更新select的选中options。
177行:调用reloadDropdownLabel,将用户选中的options更新到fs-label中,并触发select的change事件。
从上面代码分析可以看出,select一开始就隐藏起来了,我们看到的和操作的都是脚本生成的div。然后div的变化会联动到select上,并触发它的change事件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

下拉多选框的实现 的相关文章

  • Windows 无法打开启动配置数据存储拒绝访问

    在我们输入一些命令时会遇到如下报错 xff0c 一般情况下是由于运行cmd的账户权限导致的 方法1 xff1a 1 在系统盘C windows system32 xff08 当前系统安装所在磁盘盘符 xff09 下查找到cmd命令提示符可执
  • 人机交互设备(HID)

    人机交互设备 xff08 HID xff09 是一个设备类型 xff0c 为了使用通用USB接口支持HID设备来代替PS 2接口类型的设备 xff0c 例如键盘 鼠标和游戏控制器等等 在 HID 之前 xff0c 设备只能使用规定好的鼠标或
  • ubuntu服务器安装可视化桌面(Gnome)

    作者 xff1a 锕琅 原文链接ubuntu服务器安装可视化桌面 xff08 Gnome xff09 知乎 目录 基础环境配置和安装 1 切换用户为Root 2 更新获取软件及版本信息 3 安装VNC4Server 4 启动VNC Gnom
  • CocosCreator新手教程——cc.Node基础常用接口(API)

    CocosCreator开发笔记 cc Node基础常用接口 xff08 API xff09 一 常用属性 cc Class extends cc Component properties sprite default null type
  • 终端命令行新手教程——shell脚本

    终端命令基础 摘自 xff1a 菜鸟教程 本文精简自原文章 xff0c 总结了常用部分 xff0c 如需深入学习请点击上方链接 一 运行环境 打开文本编辑器 可以使用 vi vim 命令来创建文件 xff0c 新建一个文件 test sh
  • 面试:如果程序崩溃,可能的原因是什么?

    You are given the source to an application which crashes when it is run After running it ten times in a debugger you fin
  • Mac 安装 nodejs方法——新手教程

    访问nodejs官网 xff0c 点击蓝色选框区域稳定版 xff0c 并下载官网链接 我们这里选择了右面的12 8 1 current xff0c 点击下载 双击刚下载的文件 xff0c 按步骤默认安装就行 安装完成后打开终端 xff0c
  • module.exports用法

    module exports 对象是由模块系统创建的 在我们自己写模块的时候 xff0c 需要在模块最后写好模块接口 xff0c 声明这个模块对外暴露什么内容 xff0c module exports 提供了暴露接口的方法 转自博客 1 返
  • 八 关于电机驱动芯片L298N使用心得

    车模套件的选择 当时由于是第一次做某个东西 xff0c 所以购买车模的时候不是很有信心 xff0c 就买了一个比较廉价一点的 xff0c 事实证明一分价钱一分货 xff0c 组装的时候发现轮子有点松动 xff0c 这就意味着跑的时候 xff
  • 解决Ubuntu网络调试助手安装后无法打开问题

    通常很多初学者在学习和开发网络相关程序时 xff0c 基本上都会用到NetAssist这个网络调节助手 xff0c 该工具简洁实用 xff0c 对于初学网络编程的人员特别友好 xff0c windows系统下该调节助手在任何系统版本中都能正
  • IP地址与二进制的转换

    以192为例 以192 168 100 7为例 192的二进制为11000000 168的二进制为10101000 100的二进制为01100100 7的二进制为00000111 192 168 100 7的二进制为11000000 101
  • 根据子网掩码求最大主机数(面试被问过)

    如子网掩码255 255 240 0 化成二进制11111111 11111111 11110000 00000000 子网号中里面的1代表网络号 xff0c 0代表主机号 xff0c 有12个0 xff0c 即最大主机数为2的12次方 又
  • 麒麟系统安装bin类型文件

    在终端 xff08 windows的cmd xff09 运作命令修改文件属性 xff0c 使其可以被执行 chmod a 43 x file bin 运行 sudo file bin
  • 深度和追踪最好use the D415 and the T265 in parallel.

    All SLAM solutions and there are many good ones are limited by the information they receive It is possible to run host b
  • 树莓派上编译安装realsense经验

    1 树莓派系统一定要用realsense官方指定的ubuntu mate xff0c 树莓派B3 43 只能装18 0 4 xff0c 树莓派B3和以前的只能装16 0 4 2 不要妄想装realsense的非编译版本 xff08 官网说打
  • 树莓派安装realsense自己的步骤梳理

    树莓派3B 43 装上ubuntu 18 0 4的内核亲测是 4 15的 xff0c 跟ubuntu官网一致 目前最新的也就是4 15 xff0c 不知道realsense官网瞎扯什么4 16啥的干啥 xff1f 都还没有的东西 xff0c
  • Opencv快速入门(C++版)

    Opencv快速入门 C 43 43 版 Excerpt Opencv快速入门 C 43 43 版 xff09 前言1 图像的读取与显示所使用的API接口 xff1a 代码演示 xff1a 2 图像色彩空间转换所使用的API接口 xff1a
  • 搭建elsticsearch集群遇到的错误

    错误一 xff1a 报错with the same id but is a different node instance解决办法 原因 xff1a 是因为复制虚拟机时 xff0c elsticsearch时 xff0c 将elsticse
  • PX4无人机控制

    1 PX4安装 安装主要是配置环境 xff0c 我是按照官网配置的 xff1a PX4 自动驾驶用户指南 特别是对于英语不好的我来讲 xff0c 配置了好几天也没有配置成功 找到了比较靠谱的参考文献 xff1a Ubuntu18 04配置搭

随机推荐

  • 吃透计算机组成原理

    文章目录 博主杂谈计算机概论计算机发展历程计算机的分类计算机的结构体系冯诺依曼体系现代计算机体系 计算机的层次与编程语言程序翻译与程序解释计算机层次 计算机计算单位与字符编码计算机计算单位计算机字符编码字符编码种类与历程 计算机内部结构计算
  • 远程显示docker运行结果

    查找本地IP 服务器中的docker环境操作步骤 xff1a span class token function export span DISPLAY span class token operator 61 span 10 100 12
  • 笔试——Linux操作系统

    1 Linux内核的组成部分 Linux内核主要由五个子系统组成 xff1a 进程调度 内存管理 虚拟文件系统 网络接口 进程间通信 xff1b 2 Linux系统的组成部分 主要是4个部分 xff1a 内核 shell 文件系统和应用程序
  • WIN11打开照片 浏览器 office等软件启用硬件加速后总黑屏

    解决 WIN11打开照片 浏览器 office等软件启用硬件加速后总黑屏 问题描述 xff1a 电脑为暗影精灵6 xff08 OMEN 6 xff0c 在更新intel显卡驱动程序后或者更新win11后 xff08 自动更新最新驱动 xff
  • linux执行程序运行命令失败,提示找不到命令

    安装虚拟机时提示找不到命令 sudo VMware Workstation Full 17 0 0 20800274 x86 64 bundle xff1a 找不到命令 经检查 xff0c sudo命令正常 xff0c 该脚本文件的确存在于
  • 用自己的设备(realsense d435i)跑VINS-Fusion 还是有一些坑

    操作环境 设备 xff1a MacBook pro 2019 xff0c realsense d435i 系统 xff1a Ubuntu 16 04 lts 准备工作 标定 首先标定摄像头 xff0c 这里用kalibr对摄像头和imu进行
  • realsense d435i获取与rgb图像对应的深度值

    设置 realsense ros 的rs camera launch文件 lt arg name 61 34 align depth 34 default 61 34 true 34 gt 就能得到与图像对应的深度图 比如rgb对应的深度图
  • OpenVINS 配置,并用自己的设备跑起来~

    OpenVINS 下载编译 span class token function mkdir span p workspace catkin ws ov src span class token function cd span worksp
  • 用realsense d435i传感器在实际环境中跑ORB_SLAM3,顺带解决一部分编译问题

    是的ORB SLAM3 来了 xff0c 时隔五年 xff0c 它来带的惊喜到底是啥呢 xff1f 一个完全依赖于最大后验估计 xff08 MAP xff09 的单 双目惯导融合系统高回召的地点识别功能 xff08 High recall
  • ubuntu安装vnc server-x11vnc并设置开机自动启动

    安装x11vnc 打开终端 xff0c 使用如下命令女装x11vnc sudo apt get install x11vnc 手动启动x11vnc 按组合键CTRL 43 ALT 43 T打开终端 xff0c 输入 xff1a sudo u
  • Jetson nano 的三种供电方式

    1 首先最简单的就是USB供电 xff0c 使用数据线 xff0c 连接Jetson nano 的MicroUSB接口进行供电 xff0c 拔掉J48跳线帽 MicroUSB 的供电为 5V 2A xff0c 仅能支撑5W低功率模式 Mic
  • 在docker容器中运行Ubuntu桌面版,并通过vnc连接

    拉取镜像 xff1a docker pull dorowu span class token operator span ubuntu span class token operator span desktop span class to
  • keil5写入程序时显示Error.Flash Download failed -‘CortexM4’

    keil5写入程序时显示Error Flash Download failed CortexM4 我所遇到问题的芯片是STM32F429IGT6 xff0c 可能F1系列或者其他的STM芯片都可能遇到这样的问题 xff0c 网上目前比较多的
  • slam松耦合紧耦合调研

  • 深度相机进行目标检测

    1 介绍 国外博客 xff0c 这个博客还行 xff0c 可以下载源码 CSDN 目标检测采用YOLOv5 xff0c 已经搭建好 相机采用realsense d435i 官网有文档 xff0c 示例代码 xff0c 工具等 看官网是最好的
  • 手眼标定[Realsense+大象机器人]

    踩坑 手眼标定的算法网上是比较多的 xff0c 但是很多都不好用 github上高赞的easy handeye xff0c 试了一下 xff0c 但是mycobot600没有提供moveit的配置 xff0c 而我ROS基础不是很好 xff
  • 在Linux上用docker部署项目

    在Linux上用docker部署项目 一 用xftp5或FileZilla连接服务器 二 用上面工具在服务器上创建一个文件夹 xff08 或者用命令行创建 xff09 上面是在 usr 下创建了docker文件夹 xff0c 用来放需要更新
  • idea集成docker最新

    一 安装docker 1 卸载旧版本 sudo yum remove docker docker client docker client latest docker common docker latest docker latest l
  • docker命令删除容器和镜像

    1 查看所有正在运行容器 docker ps 2 停止容器 xff08 containerId是容器id xff09 docker stop containerId 3 删除容器 docker rm 容器id 4 查看镜像 docker i
  • 下拉多选框的实现

    这两天在写一个chrome插件 xff0c 需要在popup页使用下拉多选框 用select看起来非常原始 xff0c 多选还要按住ctrl键或者command键 html代码如下 xff1a span class token operat