Jquery选择元素向后2个位置 - .next().next()的另一种方法

13

我正在寻找一种方法,可以选择一个不是通过点击函数“选中”的直接下一个div元素。

<div id="click">(siblings)</div><div>text</div><div id="get this one"></div>

现在我想选择id为"get this one"的那个 - 在我的代码中这个id是不可用的。所有的div都有相同的类并且有兄弟节点。
我可以通过$(this).next().next()选择第三个,但我认为这不是最好的方法。
此外,点击的那个之前可能会有div,所以它不一定是第一个。

我尝试了:nth-child选择器,但没有找到解决方案。
稍后我还可能想选择点击后的第13个(或第23个、第65个等)。这意味着我希望有一个相当动态的解决方案来解决这个问题。

谢谢你的帮助,
Phil

2个回答

22
你可以使用.nextAll().eq()来实现动态效果,示例如下:
$(this).nextAll().eq(1) //0 based index, this would be .next().next()

这将允许您获取n个前面的同级元素,这似乎是您想要的。


好的,现在我感觉自己像个白痴。这么简单 - 而且它还有效。它是如此合理,以至于我为自己没有自己解决问题而感到后悔。非常感谢你 :) - Phil

0

看起来$(this).parent().find('div').eq(2).attr('id')应该可以工作。

更新(添加了find('div'))


这将始终导致一个空元素集,“.parent()”选择单个元素,而不是兄弟元素 :) - Nick Craver
之前,你的答案中有nextAll('eq:2')。这个和你现在的答案有什么不同?它是否能够起到相同的作用? - d2burke
@d2burke - 无论如何,您都会获取父级中的第三个元素...这与当前元素无关,它只会获取第三个元素,无论您单击哪个。此外,我的答案使用:eq(1)表示第二个元素,它是基于0的索引 :) - Nick Craver
@Nick - 啊,是的。我明白了(关于相对选择)。我理解索引是基于0的,但我更多地是指你之前在引号中使用了“eq:1”,我想知道那是否只是另一种写法。感谢你指出你的答案和我的答案之间的区别。你的答案肯定更灵活。 - d2burke
@d2burke - 你也可以使用:eq(2)作为选择器,而不是函数调用,但当我重新阅读问题并看到他想要它动态时...使用.eq(variable)".eq(" + variable + ")"更容易,并且速度更快。 - Nick Craver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接