jQuery选择:遍历,然后退回

时间:2009-05-27 16:08:31

标签: jquery css-selectors

我正在努力学习如何使用jQuery选择特定元素。这里列出的条件:

  • 在我的函数的相关位置,this引用了span
  • span可能是孩子,大孩子或大孩子,但在层次结构的某个地方,它由td包含。
  • 我想选择span内的最后td
  • span可能是this,也可能是另一个span
  • 要选择的span代码是包含td的直接子代,因此last-child是可行的。但是,为了将来的灵活性,首选的解决方案并不是直接的孩子。

到目前为止,我使用它来选择正确的父元素:

$(this).parents('td')

我不知道如何遍历DOM树以获取所选span内的最终td。谢谢!

修改

根据我在下面的评论,也可以选择spandiv,以最后者为准。

3 个答案:

答案 0 :(得分:13)

$(this).parents('td').children('span:last');

应该这样做。

修改

我没有注意到你不仅要与直系孩子打交道。如果你想要所有的后代,那么你会使用

$(this).parents('td').find('span:last')

我认为span始终是td的孩子。

最终修改

为了后人的缘故(并且让人们在将来更容易找到这个答案),因为这已经被接受作为答案,Ben在他的答案中提出了一个更优雅的解决方案,我将把它放在这里:

$(this).closest('td').find('div,span').filter(':last')

正如Ben所说,你必须使用JQuery 1.3来实现closest()。干得好! : - )

答案 1 :(得分:5)

我更喜欢在这种情况下使用closest,而不是parents。您不必担心祖先中有两个或更多'td'元素。

$(this).closest('td').children("span:last")

答案 2 :(得分:4)

您要查找的函数是find(expr),它会搜索所有后代节点:

$(this).closest('td').find('span:last')

修改:选择上一个divspan

$(this).closest('td').find('div,span').filter(':last')

编辑2: Mark就使用closest()代替parents()提出了一个很好的观点,但请注意,您需要使用jQuery 1.3