jQuery遍历连续的对等体

时间:2012-05-31 21:28:00

标签: jquery traversal

我有一系列不同类的行。

<tr class="head">...
<tr class="group">...
<tr class="item">...
<tr class="item">...
<tr class="item">...
<tr class="group">...
<tr class="item">...
<tr class="item">...
<tr class="item">...
<tr class="group">...
<tr class="item">...
<tr class="item">...
<tr class="item">...

假设我的上下文位于其中一个项目中,如何选择项目之前,之后和之后的所有行,而不是跨越组?

在这个例子中,无论我在哪个项目行,我都应该总是得到三个项目行的集合。

目前我有这个,虽然它有效,但我希望有更清洁的方式。

var $itemRows = $targetRow.prevUntil('tr.group').add($targetRow.nextUntil('tr.group')).add($targetRow);

.siblings('tr.item')这样的东西,但是这将获得所有九个项目,而不是三个有争议的项目。我不能把它们放在tbodies中,因为它已经存在于tbody中并且嵌套它们是无效的html。

我已将其改进为

var $itemRows = $targetRow.prevAll('tr.group:first').nextUntil('tr.group');

1 个答案:

答案 0 :(得分:2)

假设this是其中一行(而不是一组),您可以这样做:

在测试了许多场景之后,这就是我发现的工作:

$(this).prevUntil('tr.group').andSelf().nextUntil('tr.group').andSelf()

问题是当你点击一个组中的第一个项目时,像gdoron这样的其他组合对我来说不起作用。

你可以在这里看到这个:http://jsfiddle.net/jfriend00/mks74/


我认为必须有一点清洁的方式,所以我一直在努力,这就是我发现的:

$(this).prevAll('tr.group:first').nextUntil('tr.group')

你可以在这里看到这个:http://jsfiddle.net/jfriend00/HZVnX/


这里有什么用处(jQuery似乎没有提供)是一个jQuery方法,它可以获得符合某些选择标准的先前兄弟。我们可以这样做:

jQuery.fn.prior = function(selector) {
    return (this.pushStack(this.prevAll(selector).first()));
};

然后,解决这个问题的代码变得更合乎逻辑:

$(this).prior('tr.group').nextUntil('tr.group')