2011-07-15 16 views
2

有没有更简单的方法来写这个?快捷键筛选所有元素,包括自我?

$myelements.find('*').andSelf().filter(myselector) 

据我所知,没有办法搜索所有的后代,包括它自己,没有这样做?

如果没有这个功能,我会写一个,但如果它已经存在,我不想重新发明轮子。


这是(修订):

(function($,undefined) { 
    $.fn.all = function(selector) { 
     if(selector===undefined) return this.find('*').andSelf(); 
     return this.find(selector).add(this.filter(selector)); 
    } 
})(jQuery); 
+0

不,那个轮子当前不存在(没有沿着元素层次结构的“反” - 'close()“方法)。你可以继续发明它。但是请记住,'andSelf()'* does *存在,其调用只需要9个字符。 –

+0

@Frederic:这不仅仅是9个字符,因为我也需要那个愚蠢的'.find('*')',这可能是低效的,因为它获取每个元素,而不仅仅是我想要的。 – mpen

回答

2

没有没有办法做到这在API中,虽然我认为如果您使用选择器执行正常的.find(),则可能会获得更好的性能结果,然后仅将.filter()应用于元素本身。

var all = $myelements.find(myselector).add($myelements.filter(myselector)); 

这样,如果您使用有效的选择器,则可以使用querySelectorAll

否则,您完全使用JavaScript代码而不是本机代码(在支持的浏览器中)完成过滤器。

当然你也可以将它制作成插件。

0

不是真的要好得多:

$($myelements + ', ' + $myelements + ' > *').filter(myselector); 
+2

这更糟糕的家伙:) – AlienWebguy

+0

是的,它实际上*更多*字符。 :D – wanovak

+1

你假设'$ myelements'是一个字符串吗?前面的'$'是一个约定,用来表示它是一个jquery对象,这一点通过我将它当作一个对象来体现。即,这甚至不会起作用。 – mpen