jQuery选择器性能

3

有没有更高效的方法来编写这个代码呢?

$('#test').find('option:selected[value!=""]')

不,我只是想看看是否有更好的编写方式。 - Hussein
2个回答

5

您可以稍加调整,但使用方法而不是Sizzle:

$('#test').find('option').filter(function() {
    return this.selected && this.value.length
});

基准测试: http://jsperf.com/sizzle-vs-methods-filter/12

.filter() 对我来说快约70%。


我尝试了 this.selected && this.value.length,但 Console.log 给出的是 jquery() 而不是一个值。 - Hussein
@alex:糟糕,我忘记了return语句,请看更新。抱歉。 - jAndy
@jAndy,你能再次运行含有返回语句的基准测试吗?我很想知道它是否会影响结果。 - a'r
@ar:我也更新了基准测试,但实际上并没有影响到性能。 - jAndy
@jandy,谢谢,我发现我的帖子后面缺少了return。 - Hussein
哇,我从来没有想到.filter()和选择器之间会有这么大的差别。如果有什么区别,我还以为它会更慢呢。 - Andrew Ensley

0

嗯,始终只会有一个被选中,所以我认为你不需要一个find()处理程序。

我会这样写:

$('#test option:selected[value!=""]')

我还没有测试过。


使用 http://jsperf.com 进行测试显示,这种方法比使用 find() 慢了2%。使用 filter() 才是正确的方式。 - Hussein

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