$(“selector”)。find(“:psuedo-class”)不返回所需的元素

时间:2016-02-24 10:24:08

标签: javascript jquery jquery-selectors

我有以下声明:

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()如果传入的选择器是伪类(即以冒号开头),则应该更改为不插入空格。

4 个答案:

答案 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)