代码之家  ›  专栏  ›  技术社区  ›  Ian Kemp

$(“选择器”)。find(“:psuedo类”)不返回所需的元素

  •  0
  • Ian Kemp  · 技术社区  · 10 年前

    我有以下声明:

    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 回复  |  直到 10 年前
        1
  •  3
  •   Arun P Johny    10 年前

    您需要将过滤器用作 optionsWithAttribute 包含 option 元素, find() 将查找匹配的子元素

    var selectedOptions = optionsWithAttribute.filter(":selected");
    
        2
  •  2
  •   madalinivascu    10 年前

    .find() 选择父元素的子元素,您需要使用 .filter() 这将只为您提供具有select属性的项

    当您使用此代码时 var selectedOptions = optionsWithAttribute.find(":selected"); jquery将使用从标记选项(optionsWithAttribute)中选择的属性搜索所有元素

        3
  •  1
  •   elreeda    10 年前

    尝试使用 filter() 方法

    将匹配的元素集减少为与选择器或 通过函数测试。

    var selectedOptions = optionsWithAttribute.filter(":selected");
    
        4
  •  0
  •   Jai    10 年前

    “选项[数据属性]:已选择”
    显然什么都不匹配

    当然,因为这是不正确的,所以在选项中找不到所选选项,所以将其更改为:

    var optionsWithAttribute = $(element).find("option[data-attribute]:selected");
    console.log(optionsWithAttribute)