【问题标题】:How to get nth jQuery element如何获取第 n 个 jQuery 元素
【发布时间】:2009-09-18 06:53:42
【问题描述】:

在 jQuery 中,$("...").get(3) 返回第三个 DOM 元素。返回第三个jQuery元素的函数是什么?

【问题讨论】:

    标签: jquery


    【解决方案1】:

    您可以使用:eq 选择器,例如:

    $("td:eq(2)").css("color", "red"); // gets the third td element
    

    或者eq(int)函数:

    $("td").eq(2).css("color", "red");
    

    另外,请记住索引是从零开始的。

    【讨论】:

    • 作为同义词,您也可以使用:nth() 选择器——不要与:nth-child() 混淆
    • 更好的答案,并且在事实发生 3 年后没有编辑 :)
    • 感谢您实际解释如何使用选择器/功能
    【解决方案2】:

    为什么不先浏览(短)选择器页面?

    这里是::eq() 运算符。它的用法和get()一样,但它返回的是jQuery对象。

    或者你也可以使用.eq()函数。

    【讨论】:

    • 不应该是.eq()而不是:eq()吗?
    • 是的,.eq() 更适合 OP 的问题。 :eq() 用于$ 的字符串参数中,而.eq() 是现有jQuery 对象的方法。
    • 我发誓我必须去看看这个每个单个时间.
    • @JoelWorsham 取决于所需的行为。 $('select').find('option').eq(n) 基本上会忽略分组,将所有选项作为一个整体。如果你想要每个组,这样的东西是必要的:$('select').find('optgroup').each(function() { $(this).find('option').eq(n)...; })
    • "为什么不先浏览(短)选择器页面?" - 因为“eq”是一个非常糟糕的名字,我经常跳过它,因为 eq 对我来说意味着比较......
    【解决方案3】:

    如果您可以控制构建 jQuery 对象的查询,请使用 :eq()

    $("div:eq(2)")
    

    如果您无法控制它(例如,它是从另一个函数或其他东西传递的),请使用.eq()

    var $thirdElement = $jqObj.eq(2);
    

    或者,如果您想要其中的一部分(例如,第三、第四和第五个元素),请使用 .slice()

    var $third4th5thElements = $jqObj.slice(2, 5);
    

    【讨论】:

    • 正在寻找切片,但不知道如何搜索。感谢您超出原始问题的要求。
    • 对于偶然发现这个答案的人,需要注意的一个有用的一点是第 n 个子选择器是基于 1 而 :eq 或 .eq() 是基于 0
    • 您实际上应该使用.eq() 而不是:eq()。性能略有提升。
    【解决方案4】:

    我觉得你可以用这个

    $("ul li:nth-child(2)").append("<span> - 2nd!</span>");
    

    它在每个匹配的 ul 中找到第二个 li 并记录它。

    【讨论】:

      【解决方案5】:

      .eq() - 一个整数,指示元素从 0 开始的位置。

      例如:

      考虑一个带有简单列表的页面:

      <ul>
      <li>list item 1</li>
      <li>list item 2</li>
      <li>list item 3</li>
      <li>list item 4</li>
      </ul>
      

      我们可以将此方法应用于列表项集合:

      $( "li" ).eq( 2 ).css( "background-color", "red" );
      

      For more information : .eq()

      【讨论】:

        【解决方案6】:

        如果你已经在一个变量中有jquery对象,你也可以把它当作一个普通的索引数组,不使用jquery:

        var all_rows = $("tr");
        for(var i=0; i < all_rows.length; i++){
           var row = all_rows[i];
           //additionally, you can use it again in a jquery selector
           $(row).css("background-color","black");
        }
        

        虽然上面的例子没有任何用处,但它代表了如何将 jquery 创建的对象视为索引数组。

        【讨论】:

        • 对,还有一个(希望有用)提示:如果行包含&lt;select&gt; 元素的列表,并且您想要选定的组合框元素,请使用 $(row).val();
        【解决方案7】:

        如果我正确理解你的问题,你总是可以像这样包装 get 函数:

        var $someJqueryEl = $($('.myJqueryEls').get(3));
        

        【讨论】:

        • 这只是“艰难的方式”,这是eq()免费为您提供的。
        【解决方案8】:

        如果您想在循环中获取特定元素/节点或标签,例如

        <p class="weekday" data-today="monday">Monday</p>
        <p class="weekday" data-today="tuesday">Tuesday</p>
        <p class="weekday" data-today="wednesday">Wednesday</p>
        <p class="weekday" data-today="thursday">Thursday</p>
        

        所以,从上面的代码循环开始执行,我们想要选择特定的字段,我们必须使用 jQuery 选择,它只能从上面的循环中选择期望的元素,所以代码将是

        $('.weekdays:eq(n)');
        

        例如

        $('.weekdays:eq(0)');
        

        还有其他方法

        $('.weekday').find('p').first('.weekdays').next()/last()/prev();
        

        但当HTML &lt;tag&gt; 具有唯一的类名时,第一种方法更有效。

        注意:当它们在目标元素或节点中没有类名时,使用第二种方法。

        更多关注https://api.jquery.com/eq/

        【讨论】:

          【解决方案9】:

          不过,对于使用选择器的迭代似乎没有任何意义:

          var some = $( '...' );
          
          for( i = some.length -1; i>=0; --i )
          {
             // Have to transform in a jquery object again:
             //
             var item = $( some[ i ] );
          
             // use item at will
             // ...
          }
          

          【讨论】:

            【解决方案10】:

            使用 jQuery 访问和删除第 N 个元素的实时示例:

            <html>
            <head></head>
            <body>
                <script type="text/javascript" 
                src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
                <script type="text/javascript">
                  $(document).ready(function(){
                    $('li:eq(1)').hide();
                  });
                </script>
                <ol>
                  <li>First</li>
                  <li>Second</li>
                  <li>Third</li>
                </ol>
            </body>
            </html>
            

            当它运行时,有序列表中有两个项目显示,第一个和第三个。第二个被隐藏了。

            【讨论】:

            • P.S. :计数从0开始;第一个在索引 0 处,第二个在索引 1 处,依此类推....
            【解决方案11】:
             $(function(){
                        $(document).find('div').siblings().each(function(){
                            var obj = $(this);
                            obj.find('div').each(function(){
                                var obj1 = $(this);
                                if(!obj1.children().length > 0){
                                    alert(obj1.html());
                                }
                            });
            
                        });
                    });
            
            <div id="2">
                <div>
                    <div>
                        <div>XYZ Pvt. Ltd.</div>
                    </div>
                </div>
            </div>
            <div id="3">
                <div>
                    <div>
                        <div>ABC Pvt Ltd.</div>
                    </div>
                </div>
            </div>
            

            【讨论】:

            • "$(function(){" 首先是秋天,我创建了匿名函数,它会自动触发。在其中,我找到了三个使用兄弟姐妹的父 div。然后我迭代了所有 3 个父 div 和检查每个孩子长度的长度。我如何确定父 div 中是否是最后一个 div。现在我正在提醒每 3 个主要父 div 的最后一个 div html。
            • 你可以edit你的答案,而不是在cmets中提供信息:)
            猜你喜欢
            • 2010-10-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-08-19
            • 1970-01-01
            • 1970-01-01
            • 2023-03-24
            • 2012-04-27
            相关资源
            最近更新 更多