过滤所有元素的快捷方式,包括自我?

时间:2011-07-15 22:50:11

标签: javascript jquery

有没有更短的方式来写这个?

$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);

2 个答案:

答案 0 :(得分:2)

没有办法在API中执行此操作,但我认为如果使用选择器执行常规.find(),您可能会获得更好的效果结果,然后仅将.filter()应用于元素本身。

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

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

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

当然你也可以把它变成一个插件。

答案 1 :(得分:0)

不是更好:

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