我正在努力学习如何使用jQuery选择特定元素。这里列出的条件:
this
引用了span
。span
可能是孩子,大孩子或大孩子,但在层次结构的某个地方,它由td
包含。span
内的最后td
。 span
可能是this
,也可能是另一个span
。span
代码是包含td
的直接子代,因此last-child
是可行的。但是,为了将来的灵活性,首选的解决方案并不是直接的孩子。到目前为止,我使用它来选择正确的父元素:
$(this).parents('td')
我不知道如何遍历DOM树以获取所选span
内的最终td
。谢谢!
修改
根据我在下面的评论,也可以选择span
或div
,以最后者为准。
答案 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)
答案 2 :(得分:4)
您要查找的函数是find(expr),它会搜索所有后代节点:
$(this).closest('td').find('span:last')
修改:选择上一个div
或span
:
$(this).closest('td').find('div,span').filter(':last')
编辑2: Mark就使用closest()代替parents()提出了一个很好的观点,但请注意,您需要使用jQuery 1.3