我什么时候应该用$()包装DOM对象?

时间:2009-12-09 14:05:43

标签: jquery

使用JQuery:

有时,我可以做variable.val()并且它有效。有时,我需要使用$(variable).val()

我希望能够在没有反复试验的情况下做出选择。

有人知道在使用JQuery时用$()包装对象的时间吗?

6 个答案:

答案 0 :(得分:15)

使用$()包装DOM对象会将其转换为jQuery Wrapped Set Element。这样你就可以用它来调用jQuery方法(val(),attr(),show(),hide(),serialize())。

但是,如果您需要获取或设置纯javascript属性,则不应将其包装。

答案 1 :(得分:6)

简单地说$(variable)接受一个DOM元素并创建一个jQuery对象。在最终得到DOM对象而不是jQuery对象时,您需要使用它。

获得DOM对象的最可能原因是:

  1. 事件 - 无论如何在jQuery中绑定(如click),this变量和所有事件参数都将引用DOM对象(而不是jQuery对象)。
  2. 非jQuery javascript - 如果你的部分代码仍然使用document.getElementById(如果你有一些遗留的javascript,或者因某些原因引用了不是jQuery插件的第三方库)那么这些将是DOM对象,需要包装。
  3. 如果$(variable)已经是一个jQuery对象,那么调用variable没有什么害处,超出了对可能根据你如何使用它假设它是一个DOM对象的人的混淆,你可以随时获得通过调用$(variable)[0]返回DOM对象。

答案 2 :(得分:5)

  

有人知道在使用JQuery时用$()包装对象的时间吗?

要点:obj instanceof jQuery返回false时。这通常是this和方法参数的情况(除非记录该方法以使参数必须是jQuery对象)。

因此,如果您有一个this并且想要拥有jQuery函数,那么您需要将其包装起来。 E.g。

function() {
   $this = $(this);
   $this.val();
}

此外,如果你有一个函数,其参数不一定是jQuery元素,并且你想确保它们是,那么你需要先包装它。 E.g。

function(e) {
    e = $(e);
    e.val();
}

重新包装jQuery元素没有坏处。

答案 3 :(得分:0)

在学习jQuery的开始,找出变量已经包装的时候通常是反复试验的。例如,在事件函数中,this-variable不是jQuery对象。另外,我认为重新封装jQuery对象并不危险。

我不认为这是你需要担心的事情,因为你很快就会发现什么时候包装,什么时候不能,因为你将来会编写更多的jQuery代码。

答案 4 :(得分:0)

如果你有一个事件处理程序然后得到val()你需要包装它,因为下面的elem没有被包装,但你可以在下面的例子中做elem.value

$('#someid').bind('click', function(e) {
  var elem = e.currentTarget;
}

如果没有使用选择器获取元素,则可能需要将其包装。

如果你真的需要它,你可以只有一个实用函数来返回一个包装元素,所以它总是被包装。

只需将任何元素传递给它,然后它就可以检查它是否是一个jquery对象,如果没有包装它,但它将始终返回包装版本。

答案 5 :(得分:0)

始终使用$(something) (如果您打算在something上使用jQuery方法)

没有任何害处