2010-10-27 78 views
3

有没有在单个查询中结合多重选择器和基本筛选器的方法?将多个选择器与筛选器结合使用

例如...

var jq = $(someElement); 

// Want to find the first following sibling node which has either classA or classB. 

// This imaginary jquery does not quite work. 
jq.nextAll("(.classA, .classB):first") 

// This works. But I wonder if I can achieve the same result with just one query. 
jq.nextAll(".classA, classB)").filter(":first") 

回答

2

不知道你想什么做的,但如果你只是想第一个元素的innerHTML,你应该能够做这样的事情:

$(".classA, .classB", someElement).html(); 

因为HTML将在第一个匹配的作用元件。

否则,我看不出你的方法有什么问题......我想你只是要求额外的知识?

我永远也找不到了太大的必要:第一selectorbut我可能会做这样的:

$(".classA, .classB", someElement).first(); 
+0

谢谢你的回答,安迪。如果第一个查询有多个匹配元素,那么jQuery会找到所有匹配并选择第一个?我认为在单个查询中这样做会让jquery知道我只对第一个元素感兴趣,这样jquery将停止查找任何其他匹配 - 使查询更快。也许?也许不会? – Kei 2010-10-27 03:20:24

+1

这很有趣。我试图通过jQuery的源代码,但不够好,以了解究竟发生了什么。我发现的第一个函数只是eq函数的别名,它调用this.slice(i,+ i + 1),其中this是结果。所以,我假设无论你如何说出这些类型的复杂选择器,它都会抓住所有的结果,然后将它们过滤掉。这只是从我可以看到的猜测。我真的不知道它是如何工作的。 – 2010-10-27 03:35:04

+1

@Kei当找到第一个匹配时,无法告诉jQuery停止。请参阅:http://stackoverflow.com/questions/3950888 – 2010-10-27 03:59:38

5

如果你做.first(),而不是.filter(":first")

这有帮助吗?

2

以及即时通讯很肯定这是同样的事情,并且只使用一个查询:

jq.nextAll('.classA:first, .classB:first'); 

显然其MROE冗长,但除非有什么特别的:first选择,应该工作。

+0

我认为这个建议...是否返回一个结果,或者匹配或者类中的第一个结果(二结果)?我不太确定,所以我拖延了,但我很好奇,知道这是否确实有效,我不想测试:-P – 2010-10-27 03:09:01

+3

这将(可能)返回两个结果。 http://jsbin.com/igufu3/ – user113716 2010-10-27 03:11:30

+0

虐待随着什么patirick说,因为我没有测试,并从来没有用过自己:-) – prodigitalson 2010-10-27 03:12:54

1

试试这个:

var first = jq.nextAll('.classA, .classB').first(); 

工作实例here