使用jQuery获取第二个孩子


187
$(t).html()

退货

<td>test1</td><td>test2</td>

我想td$(t)对象中检索第二个。我在寻找解决方案,但对我没有任何帮助。任何想法如何获得第二个元素?

Answers:


349

抢第二个孩子:

$(t).children().eq(1);

或者,抓住第二个孩子<td>

$(t).children('td').eq(1);

2
$(t).children('td').eq(1)和之间有什么区别$(t).children()[1]
Green Lei

6
@GreenLei很好地开始了,第一个返回了一个jQuery对象,第二个返回了一个Node对象
anthonygore

2
这也适用于find()jQuery方法吗?作为$(t).find('td').eq(1)获得第二<td>,如果t是,比如说,一个表,我需要看下跌超过1点?
贾斯汀·L.

.children('td').eq(1)由于某种原因,我无法上班,但.find('td').eq(1)工作得很好。
SharpC

27

这是一个可能更清晰地阅读代码的解决方案:

要获得无序列表的第二个孩子:

   $('ul:first-child').next()

还有一个更详细的示例:此代码获取被标识为“ my_list”的UL的第二个子元素的“ title”属性的文本:

   $('ul#my_list:first-child').next().attr("title")

在第二个示例中,您可以在选择器的开头删除“ ul”,因为它是多余的,因为ID对于单个页面应该是唯一的。只是为了增加示例的清晰度。

请注意Performance和Memory,这两个示例表现出色,因为它们不会使jquery保存随后必须过滤的ul元素列表。


在我们关注性能的同时,让我们继续对其进行引用,ul以便我们不必进行搜索。
daniel1426

22

这个怎么样:

$(t).first().next()

主要更新:

除了答案看起来多么漂亮,您还必须考虑代码的性能。因此,也完全不知道$(t)变量到底是什么。它是一个数组<TD>还是一个内部<TR>有多个节点的节点<TD>s?为了进一步说明这一点,请参阅<ul>包含50个<li>孩子的列表中的jsPerf分数:

http://jsperf.com/second-child-selector

$(t).first().next()到目前为止,该方法是最快的。

但是,另一方面,如果您采用该<tr>节点并找到<td>子节点并运行相同的测试,则结果将不同。

希望能帮助到你。:)



9

试试这个:

$("td:eq(1)", $(t))

要么

$("td", $(t)).eq(1)

8

除了使用jQuery方法外,您还可以使用提供给您的本机cells集合<tr>

$(t)[0].cells[1].innerHTML

假设t是DOM元素,则可以绕过jQuery对象的创建。

t.cells[1].innerHTML

3

令人惊讶的是,没有人提到原生的JS方式。

没有jQuery:

只需访问父元素的children属性。它将返回可通过索引访问的子元素的实时HTMLCollection。如果您想生第二个孩子:

parentElement.children[1];

在您的情况下,类似这样的方法可能会起作用:(示例)

var secondChild = document.querySelector('.parent').children[1];

console.log(secondChild); // <td>element two</td>
<table>
    <tr class="parent">
        <td>element one</td>
        <td>element two</td>
    </tr>
</table>

您还可以结合使用CSS3选择器/ querySelector()并利用:nth-of-type()。在某些情况下,此方法可能会更好,因为在这种情况下,您还可以指定元素类型td:nth-of-type(2) (示例)

var secondChild = document.querySelector('.parent > td:nth-of-type(2)');

console.log(secondChild); // <td>element two</td>

1

使用.find()方法

$(t).find("td:eq(1)");

td:eq(x) // x is index of child you want to retrieve. eq(1) means equal to 1. //1 denote second element


<table> <tr class =“ parent”> <td>元素一</ td> <td>元素二</ td> </ tr> </ table>

如果您评论中的信息与您的答案有关,请通过“编辑”将详细信息添加到您的帖子中。无论哪种方式,请删除您的评论。
mickmackusa

1

您可以在jQuery中使用以下两种方法-

使用jQuery:nth-​​child选择器 您已将元素的位置作为其参数,即要选择第二个li元素时,其位置为2。

$( "ul li:nth-child(2)" ).click(function(){
  //do something
});

使用jQuery:eq()选择器

如果要获取确切的元素,则必须指定项目的索引值。列表元素以索引0开头。要选择li的第二个元素,必须使用2作为参数。

$( "ul li:eq(1)" ).click(function(){
  //do something
});

请参见示例:在jQuery中获取列表的第二个子元素

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.