在jQuery中指定嵌套元素的更快捷方法?

时间:2010-10-20 15:07:15

标签: jquery

我有这段代码

$(this).parent().children('.vote_count').children('span.number')

但我想知道是否有更好的方法可以上升一个级别,从选择器下降两个

6 个答案:

答案 0 :(得分:3)

怎么样

$("> .vote_count > span.number", $(this).parent())

$("> span.number", $(this).siblings(".vote_count"))

$("~ .vote_count > span.number", this)

$(this).find("~ .vote_count > span.number")` 

使用sibling selectorchild selector

答案 1 :(得分:2)

如何使用.siblings

$(this).siblings('.vote_count').children('span.number');

毕竟,我父母的孩子都是我的兄弟姐妹。


根据@patrick dw的评论

编辑,如果您需要确保this也包括在内*那么您可以使用.andSelf()

$(this).siblings('.vote_count').andSelf().children('span.number');

经过与patrick的讨论(见评论),看起来最好的答案可能就是你已经拥有的那个:$(this).parent().children('.vote_count').children('span.number'),除非你可以根据你的方式对this做出假设选择它。


*第一个答案(不使用andSelf()的答案)假定this不是.vote_count

答案 2 :(得分:1)

你可以将它浓缩一些:

$(this).parent().find('> .vote_count > span.number')

Live example

这具有尽可能多地卸载到选择器引擎(而不是进行单独的函数调用)的优点,它可以可能进行优化。 (它不一定是,只是你让它成为可能。)与其他几个解决方案不同,它不会错过当前元素,如果它是.vote-count,它会尊重你对即时的使用--child函数而不是后代函数,而且它很简单。不过,你的原版对我来说似乎也不错。

你原来只考虑直接的孩子,我认为这是故意的,但为了完整,我会提到:

如果您想在父级下的任何级别找到.vote-count,并查找span.number的直接子级,请执行以下操作:

// Slightly different from your original, see comment above
$(this).parent().find('.vote_count > span.number')

如果您只想查找立即子项的.vote-count,但随后在其下方找到span.number(即使不是直接孩子),请执行此操作:

// Slightly different from your original, see comment above
$(this).parent().find('> .vote_count span.number')

...最后如果你想在父母的任何地方找到任何.vote-count(不仅仅是一个直接的孩子)并在其下找到任何span.number(不仅仅是一个直接的孩子):< / p>

// Fairly different from your original, see comment above
$(this).parent().find('.vote_count span.number')

答案 3 :(得分:1)

就我个人而言,我认为您可以很好地坚持原始版本,但我可以通过使用原生.parent()属性来更改它以消除.parentNode调用。

$(this.parentNode).children('.vote_count').children('span.number')

答案 4 :(得分:0)

$(this).parent().find(".vote_count > span.number");

是另一种选择。

答案 5 :(得分:0)

我不太确定你是否正在寻找这个:

$(this).parent().find('.vote_count > span.number')