jQuery/JS获取select指定值option数组 实现元素移除及时间数组生成
select下拉框指定option批量操作及时间匹配数组生成方案
一、批量匹配移除/隐藏指定option
最初拼接多属性选择器的写法只适合少量固定值场景,值多了之后维护成本极高,推荐用数组存目标值+过滤匹配的方案实现:
- 所有需要匹配的目标value统一存在数组中,后续调整规则只需要修改数组内容即可
- 遍历下拉框下的所有option元素,判断当前元素的value是否在目标数组中,将匹配到的元素集合统一执行操作
基础实现代码:
// 需要操作的目标value集合,增删规则直接改这个数组 const targetValues = ["1", "2", "3", "6"]; $('select option') .filter(function() { // 严格匹配值,避免隐式类型转换导致的误匹配 return targetValues.includes($(this).val()); }) .remove(); // 要做隐藏操作就替换为.hide(),需要恢复显示时用.show()即可
注意:之前的实现里存在变量名不一致的笔误:定义的数组名为myArray,匹配时传入的是testArray,会直接导致匹配逻辑失效,写代码时要注意变量名统一。
二、生成带前导零的固定步长时间匹配数组
之前的时间数组生成逻辑有两个核心问题,导致无法匹配option的value:
- 起点值写
0800属于JS语法坑:以0开头的数字字面量会被解析为八进制数,直接参与计算会得到错误结果 - 生成的结果是数值类型,没有补前导零,和option返回的4位字符串格式(如
"0800")类型、格式都不匹配,自然无法命中
正确实现代码:
const end = 1000; const start = 800; // 禁止写0开头的数值字面量,避免八进制解析错误 const step = 5; const arrayLength = Math.floor(((end - start) / step)) + 1; const timeArray = [...Array(arrayLength).keys()].map(x => { const timeValue = (x * step) + start; // 数值转字符串后,固定补前导零到4位长度,和option value格式完全对齐 return String(timeValue).padStart(4, '0'); }); console.log(timeArray); // 输出结果:["0800", "0805", "0810", ... , "0955", "1000"]
兼容提示:如果需要适配IE等不支持
padStart方法的老旧环境,可以替换补零逻辑为('0000' + timeValue).slice(-4),实现效果完全一致。
生成的timeArray可以直接传入之前的目标值数组位置,就能完成对应时间选项的批量过滤操作。
内容的提问来源于stack exchange,提问作者ClosDesign
相关产品推荐
相关产品推荐

