我有以下声明:
var optionsWithAttribute = $(element).find("option[data-attribute]");
我现在想要从该集中获取所选的选项,所以我写道:
var selectedOptions = optionsWithAttribute.find(":selected");
然而,这会产生有效的选择器:
"option[data-attribute] :selected"
这显然不匹配任何东西(感谢jquery.whiny帮助我解决这个问题)。正确的选择器将是:
"option[data-attribute]:selected"
(注意]
之后空格不足。)
显然这是因为后续调用.find()
会在前面添加一个空格,以便(例如)表达式$("select").find("option")
产生选择器select option
而不是selectoption
。要么我做错了 - 在这种情况下请教育我 - 或者.find()
如果传入的选择器是伪类(即以冒号开头),则应该更改为不插入空格。
答案 0 :(得分:3)
您需要使用过滤器,optionsWithAttribute
包含option
元素,find()
将查找匹配的后代元素
var selectedOptions = optionsWithAttribute.filter(":selected");
答案 1 :(得分:2)
.find()
选择父元素的子元素,您需要使用.filter()
,它只会为您提供具有select属性的项目
当您使用此代码var selectedOptions = optionsWithAttribute.find(":selected");
时,jquery将使用从标记选项中选择的属性搜索所有元素(optionsWithAttribute)
答案 2 :(得分:1)
尝试使用filter()方法
将匹配元素集减少到与选择器匹配的元素集 通过功能测试。
var selectedOptions = optionsWithAttribute.filter(":selected");
答案 3 :(得分:0)
“选项[data-attribute]:选中”
显然不匹配
绝对是因为这不正确,您无法在选项中找到所选选项,因此请将其更改为:
var optionsWithAttribute = $(element).find("option[data-attribute]:selected");
console.log(optionsWithAttribute)