当调用$(this)时,jQuery是否重新查询DOM?

6
在下面的代码中,当调用 $(this) 时,jQuery 是否重新查询 DOM,就好像传递了一个选择器(使用对象的某个属性作为选择器),还是保留之前返回的对象?
$('.someButton').on('click', function() {
    $(this).remove();  // Is this another lookup, or just a wrapper for the previously returned object?
});
1个回答

5

它不会重新查询DOM,this已经是一个元素。jQuery只是将上下文设置为该元素,调整长度并返回自身。这段代码来自于init函数,当你执行$(something)时运行,它是一个大的if..else语句的一部分,其中还检查选择器、数组等其他内容:

// HANDLE: $(DOMElement)
} else if (selector.nodeType) {
  this.context = this[0] = selector;
  this.length = 1;
  return this;

基本上,它只是将元素包裹在一个新的jQuery对象中。


谢谢您提供了参考来源。这正是我所需要的。 - monners
为了支持我同意的这个答案,这里有基于性能的证明,表明使用 $(this) 不会导致重新查找。http://jsperf.com/this-slowing-us-down - Deryck

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