这两个jQuery行可以产生不同的结果吗?

Phr*_*ogz 4 javascript jquery

我正在清理我的旧jQuery插件,我找到了这段代码:

var foo = $some.find(theCriteria).andSelf().filter(theCriteria);
Run Code Online (Sandbox Code Playgroud)

这看起来很愚蠢,就像它相当于:

var foo = $some.andSelf().find(theCriteria);
Run Code Online (Sandbox Code Playgroud)

我认为我编写第一个版本有一些原因,但我想不出它会是什么.后一个代码功能是否相同?或者我错过了一些微妙的互动?

在上面:

  • $some 是一个jQuery对象,由一个或多个元素组成,通常包含子元素.
  • theCriteria是一个复合CSS选择器字符串,例如".bar, .jim, .jam".
  • andSelf()是因为$some可能选择了一个应用了其中一个CSS类的根元素,如果是,我想选择它.

Ja͢*_*͢ck 5

是的,有区别:

<div id="test" class="bar">
  <div class="bar" />
</div>
Run Code Online (Sandbox Code Playgroud)

用这些表达式:

// gives both <div>
$('#test')
   .find('.bar')
   .andSelf()
   .filter('.bar');

// only returns the inner <div>
$('#test')
   .andSelf()
   .find('.bar')
Run Code Online (Sandbox Code Playgroud)

这是因为filter()对结果集中的所有项进行操作,而find()对结果集内的每个节点执行DOM搜索,从而有效地跳过它们.

除此之外.addBack(selector)你可以这样做:

$('#test')
   .find('.bar')
   .add($('#test').filter('.bar'))
Run Code Online (Sandbox Code Playgroud)