使用jQuery获取第二个孩子

Upv*_*ote 178 jquery jquery-selectors

$(t).html()
Run Code Online (Sandbox Code Playgroud)

回报

<td>test1</td><td>test2</td>
Run Code Online (Sandbox Code Playgroud)

我想td$(t)对象中检索第二个.我搜索了一个解决方案,但没有任何对我有用.知道如何获得第二个元素吗?

dav*_*vin 329

抢第二个孩子:

$(t).children().eq(1);
Run Code Online (Sandbox Code Playgroud)

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

$(t).children('td').eq(1);
Run Code Online (Sandbox Code Playgroud)

  • @GreenLei一开始就先返回一个jQuery对象,第二个返回一个Node对象 (5认同)
  • `$(t).children('td').eq(1)` 和 `$(t).children()[1]` 之间有什么区别 (3认同)
  • 这也适用于`find()`jQuery方法吗?就像在`$(t).find('td').eq(1)`得到第二个`<td>`,如果`t`是一个表,我需要向下看多于1个节点? (2认同)

sta*_*kex 25

这是一个可能在代码中更清晰的解决方案:

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

   $('ul:first-child').next()
Run Code Online (Sandbox Code Playgroud)

还有一个更详细的例子:这段代码获取UL标识为'my_list'的第二个子元素的'title'属性的文本:

   $('ul#my_list:first-child').next().attr("title")
Run Code Online (Sandbox Code Playgroud)

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

关于性能和内存的注意事项,这两个例子是很好的性能,因为它们不会使jquery保存一个必须在之后过滤的ul元素列表.


kum*_*rsh 22

这个怎么样:

$(t).first().next()
Run Code Online (Sandbox Code Playgroud)

主要更新:

除了答案看起来多么美观之外,您还必须考虑代码的性能.因此,知道$(t)变量究竟是什么也是相关的.它是一个数组<TD>还是一个内部<TR>有几个节点<TD>s?为了进一步说明这一点,请查看<ul>包含50个<li>孩子的列表中的jsPerf分数:

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

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

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

希望能帮助到你.:)


Jus*_*igh 15

我没有在这里看到它,但你也可以使用CSS spec选择器.查看文档

$('#parentContainer td:nth-child(2)')
Run Code Online (Sandbox Code Playgroud)


Cha*_*ndu 9

试试这个:

$("td:eq(1)", $(t))
Run Code Online (Sandbox Code Playgroud)

要么

$("td", $(t)).eq(1)
Run Code Online (Sandbox Code Playgroud)


use*_*716 8

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

$(t)[0].cells[1].innerHTML
Run Code Online (Sandbox Code Playgroud)

假设t是一个DOM元素,您可以绕过jQuery对象创建.

t.cells[1].innerHTML
Run Code Online (Sandbox Code Playgroud)