【问题标题】:Return jQuery object (instead of DOM) from jQuery array using index使用索引从 jQuery 数组返回 jQuery 对象(而不是 DOM)
【发布时间】:2013-05-18 03:27:12
【问题描述】:

我有一个 <span>s 的 jQuery 数组,我想只获取其中一个作为 jQuery 对象,以便我可以在其上添加其他方法。类似于$mySpans[2](返回字符串)或$mySpans.get(2)(直接返回DOM 元素)之类的东西。

我知道这会奏效:

$($mySpans[2]).someJQueryMethod( ... );

...但它似乎有点多余。这样做的正确方法是什么?

【问题讨论】:

    标签: javascript jquery arrays indexing


    【解决方案1】:

    像这样:

    $myspans.eq(2).method();
    

    【讨论】:

    • 为什么这个方法被命名为eq?这似乎是一个可怕的名字。我知道index 也存在,但可以说应该是indexOf 或其他东西
    • eq 或“等于”。 index 做了完全不同的事情。如果这样更有意义,您仍然可以像使用常规数组一样使用 slice
    • $myspans "equals" 2 有什么意义?我知道index/indexOf 传统上用于搜索集合并返回项目的索引,但即使不使用index,我只是认为可以找到更好的名称。
    • @voithos 确实,这是一个名称不佳的方法。 CSS 规范中没有等价物,因此 jQuery 的作者只能自行决定命名,这显然是一个错误的调用。还有很多其他命名失败的例子——例如 $.grep() 和 $().filter() 做同样的事情,但你必须使用一个或另一个,这取决于你是否已经选择了一些标签。跨度>
    • 我认为这是有道理的。它以:gt:lt 选择器为模型,所以:eq 对我来说完全有意义。我读为select where index equals 2
    【解决方案2】:

    jsFiddle Demo

    您将要使用eq。请注意,它将返回该索引处的 jQuery 对象包装元素,因此如果您只有一个匹配项,则应使用 0(随后 2 将返回集合的第三个)。

    var $thirdMatch = $mySpans.eq(2);//== jQuery object with third match
    var htmlElement = $thirdMatch[0];//== actual dom element
    var matchedHtml = $thirdMatch.html();// call some jQuery API method
    

    在存储 jQuery 对象时,通常的做法是使用 $variableName 来提高可读性。

    【讨论】:

    • 这就是我想要的。谢谢。
    猜你喜欢
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 2013-03-26
    • 2017-08-02
    • 2012-08-29
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多