【问题标题】:How to select element by id within existing selection?如何在现有选择中按 id 选择元素?
【发布时间】:2013-08-13 04:39:42
【问题描述】:

给定 HTML:

<div id="div-a"></div>
<div id="div-b"></div>
<div id="div-c"></div>

还有一个先前创建的 jQuery 选择:

var $divs = $("div");

如何通过 id 选择该选择中的特定 div?
注意:$divs 选择尚未附加到 DOM,所以我不能只选择直接(例如$("#div-b"))。

find() 选择选择的后代,所以这不起作用:

$divs.find("#div-b");

has() / :has() 选择包含具有指定选择器的元素的元素,因此这不起作用:

$divs.has("#div-b");

【问题讨论】:

  • 其他 DIV 不是孩子,而是兄弟姐妹。
  • @Diodeus 是的,我知道。这就是为什么 find()、has() 等不起作用的原因。我错过了什么吗?

标签: javascript jquery dom


【解决方案1】:

你想用filter()来减少集合/。

var elem = $divs.filter("#div-b");

【讨论】:

    【解决方案2】:

    我想你在找filter():

    var $subset = $divs.filter("#div-b");
    

    【讨论】:

    • 天哪,你的回答比我接受你的答案还快,更不用说测试了。 F.J 是赢家,@epascarello 紧随其后。谢谢!
    • 其实我觉得@epascarello 比我早半分钟就回答了。
    • 你是对的!较低的数字 = 较新。这就是为什么 SO 要求您等待 10 分钟才能接受我猜的答案;)
    • @ericsoco 当答案来得如此之快时,您可以确定您可以通过reading the documentation 弄清楚这一点。
    • @Mathletics 不要流鼻涕。在发布之前,我花了 15 分钟浏览文档。 jQuery有一个很大的API,我没有碰巧找到过滤器。
    【解决方案3】:

    如果您只想检查您已经创建的特定 jQuery 对象中的元素,您可以使用.filter() 方法:

    var $divs = $("div");
    var item = $divs.filter("#div-a");
    

    这将仅检查 $divs jQuery 对象中的元素,因此查看它们是否与选择器 "#div-a" 匹配,并将返回一个仅包含匹配项的新 jQuery 对象(在这种情况下为零或一个对象)。

    【讨论】:

    • 你是否错过了“$divs 选择尚未附加到 DOM,所以我不能直接选择”
    • @epascarello - 是的,我想我错过了。好的,那么在这种情况下,我的答案的第二部分将是最佳选择。编辑了我的答案以删除仅使用 id 的部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 2020-02-05
    • 2020-09-07
    • 1970-01-01
    • 2011-02-15
    • 2017-06-15
    相关资源
    最近更新 更多