+ -
当前位置:首页 → 问答吧 → 请教一个jquery选择器相关的简单问题

请教一个jquery选择器相关的简单问题

时间:2009-06-25

来源:互联网

HTML如下:
复制代码
  1. <html>
  2. <head></head>
  3. <body>
  4.      <div>
  5.            <div class="abc">1</div>
  6.            <div class="abc">2</div>
  7.      </div>
  8.      <div>
  9.            <a href="#" id="mm">abc</a>
  10.      </div>
  11.      <div>
  12.            <div class="abc">3</div>
  13.            <div class="abc">4</div>
  14.      </div>
  15. </body>
  16. </html>


我想使用jquery,获取到id为mm元素后面出现的第一个class为abc的元素,也就是内容为3的那个div。

知道的大侠给说一声呀。

作者: iiduce   发布时间: 2009-06-25

$("a #mm").parent().next().find(".abc").eq(0)

或者直接查

$("div .abc").eq(2)

作者: janchie   发布时间: 2009-06-25

html结构是我假设的,也就是html结构是不固定的。

我就想找到 dom中出现在#mm后面的第一个.abc

作者: iiduce   发布时间: 2009-06-25

$('#mm ~ .abc:eq(0)')

作者: keakon   发布时间: 2009-06-25

楼上的错了,~只能同级有效。

按如下,就无所谓你在哪级或哪个元素里面了:

$("#mm").parents().nextAll().find(".abc:eq(0)")

思路,取得mm的最顶级的元素对象,再取得该元素后面所有对象,再在所有子元素里查找到第一个abc
[ 此帖被janchie在2009-06-25 13:25重新编辑 ]

作者: janchie   发布时间: 2009-06-25

非常感谢你的答案,已经快接近要求了。

不过还是不完全满足。  比如无法包括与#mm同级的后面元素。

作者: iiduce   发布时间: 2009-06-25

既然你都知道差什么了,那就自己想想啊=。=

用add函数把3、4楼的答案加起来不就行了…

还有一种方法就是parents()后面add自己

作者: keakon   发布时间: 2009-06-25

楼上正解

完全解决问题,可采用如下:

$("#mm ~ .abc").add($("#mm").parents().nextAll().find(".abc")).eq(0)

作者: janchie   发布时间: 2009-06-25

感谢楼上,及楼上的楼上。

不过经测试,上面并非完美答案,正解如下:

$('#mm').nextAll('.abc').add($("#mm").parents().nextAll().find(".abc")).eq(0);

作者: iiduce   发布时间: 2009-06-30

.add应该是两个结果集吧

作者: jaway   发布时间: 2009-06-30