jQuery选择器失效,如何排除首项与选中项获取目标值?
问题分析与解决方案
咱们先拆解下你当前代码的问题:你写的选择器option:not(:first:selected)逻辑是错的——它的意思是排除「既是第一个选项又是被选中的」元素,但你的第一个选项根本没被选中,所以这个选择器其实匹配了所有选项。而val()方法对于多个匹配的option元素,只会返回第一个匹配项的value,也就是1,这自然达不到你“不显示值1和已选中选项值”的预期。
针对你的需求,我给你两种解决方案,你可以根据实际场景选择:
方案1:排除第一个选项 + 排除已选中选项
如果你想直接排除第一个选项(不管它的value是什么),同时排除所有已选中的选项,可以用双重:not()筛选:
// 收集所有符合条件的选项值,转为普通数组 const targetValues = $('select[name="Units[]"] option:not(:first):not(:selected)') .map(function() { return $(this).val(); }) .get(); console.log(targetValues);
方案2:排除指定value的选项 + 排除已选中选项
如果你想精准排除value为1的选项(不管它是不是第一个),同时排除已选中的选项,可以用属性选择器配合:not():
const targetValues = $('select[name="Units[]"] option:not([value="1"]):not(:selected)') .map(function() { return $(this).val(); }) .get(); console.log(targetValues);
为什么这样写能解决问题?
- 双重
:not()分别排除两类你不想显示的选项,精准筛选出你需要的目标元素; - 使用
.map()遍历所有匹配的选项,收集它们的value值,再用.get()把jQuery对象转换为普通数组,这样就能输出所有符合条件的值(而不是单个值)。
结合你提供的示例代码,当前没有符合条件的选项(第一个是value1,剩下的都被选中了),所以控制台会输出空数组[],完全符合你“不显示值1和已选中选项值”的要求。
内容的提问来源于stack exchange,提问作者shah rushabh
相关产品推荐
相关产品推荐

