什么时候使用$(this)
最有益?什么时候应该使用普通的this
($(this)[0]
)?
我之前发布过SO,有人告诉我,我不应该在我的功能中使用$(this)
而是this
。
为什么呢? $(this)
是内存密集还是什么?或者它有时包含的数据比您当前在函数中使用的数据多(开销太大)?
答案 0 :(得分:6)
这取决于你的需要。在例如事件处理程序,
this
是对本机DOM对象的引用
$(this)
是对jQuery扩展对象的引用,它将所有jQuery优点添加到元素(.css()
,.attr()
以及数十个(如果不是数百个)其他方法中)。
在jQuery扩展对象中,原生DOM对象仍然可用作0
属性:
element = $("#element");
alert(element[0].id); // Outputs the native object's `id` property
如果您只需要本机功能,则无需将其包装到jQuery对象中,但您通常希望能够在某些时候访问扩展函数。
重新开销,我没有任何硬数据,但我认为这是所有jQuery中最优化的操作之一,因为它通常必须应用于每个元素。除非你正在处理成千上万的元素,否则可能不会有明显的区别。
答案 1 :(得分:2)
我认为你所指的是在jQuery回调函数中使用this
。
$('a').each(function(){
this; // <-- is the DOMElement for a 'A' tag
});
您应该在需要时使用$(this)
,即当您需要在所选元素上运行某种形式的jQuery方法时。
请注意,您可以保留对this
的jQuery对象的引用,以保存重新创建它:
// instead of
$('a').each(function(){
$(this).thatPlugin();
$(this).find("other").blat();
$(this).find("foo").blat();
// 20 more
});
// do:
$('a').each(function(){
var $self = $(this); // keep a reference
$self.thatPlugin();
$self.find("other").blat();
$self.find("foo").blat();
// 20 more reusing $self
});
$self
的命名纯属个人偏好。