我正在清理我的旧jQuery插件,我找到了这段代码:
var foo = $some.find(theCriteria).andSelf().filter(theCriteria);
这看起来很愚蠢,就像它相当于:
var foo = $some.andSelf().find(theCriteria);
我认为我写第一个版本有一些原因,但我想不出它会是什么。后一个代码功能是否相同?或者我错过了一些微妙的互动?
在上面:
$some
是一个jQuery对象,由一个或多个元素组成,通常包含子元素。theCriteria
是一个复合CSS选择器字符串,例如".bar, .jim, .jam"
。andSelf()
是因为$some
可能选择了一个应用了其中一个CSS类的根元素,如果是,我想选择它。答案 0 :(得分:5)
是的,有区别:
<div id="test" class="bar">
<div class="bar" />
</div>
使用以下表达式:
// gives both <div>
$('#test')
.find('.bar')
.andSelf()
.filter('.bar');
// only returns the inner <div>
$('#test')
.andSelf()
.find('.bar')
这是因为filter()
对结果集中的所有项进行操作,而find()
在结果集内的每个节点上执行DOM搜索,有效地跳过它们。
除了.addBack(selector)
,您可以这样做:
$('#test')
.find('.bar')
.add($('#test').filter('.bar'))
答案 1 :(得分:3)