什么是最有益的? $(this)与此相比

时间:2011-02-23 09:58:07

标签: jquery

什么时候使用$(this)最有益?什么时候应该使用普通的this$(this)[0])?

我之前发布过SO,有人告诉我,我不应该在我的功能中使用$(this)而是this

为什么呢? $(this)是内存密集还是什么?或者它有时包含的数据比您当前在函数中使用的数据多(开销太大)?

2 个答案:

答案 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的命名纯属个人偏好。