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

Teb*_*ebo 17 jquery

使用JQuery:

有时,我能做到variable.val()并且有效.有时,我需要使用$(variable).val().

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

有没有人知道何时$()使用JQuery 包装对象?

kgi*_*kis 15

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

但是,如果你需要获取或设置纯javascript属性,那么你不应该包装它.

  • ...除非变量已经是一个JQuery对象,它是jquery选择器的结果:)当调用val()直接工作时可能就是这种情况. (2认同)

fyj*_*ham 6

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

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

  1. 事件 - 无论如何在jQuery中绑定(如click),this变量和所有事件参数都将引用DOM对象(而不是jQuery对象).
  2. 非jQuery javascript - 如果你的代码部分仍然使用document.getElementById(如果你有一些遗留的javascript或者因为某种原因引用了不是jQuery插件的第三方库)那么这些将是DOM对象,需要是包裹.

但是,$(variable)如果variable已经是一个jQuery对象,那么调用对于可能通过如何使用它来假定它是一个DOM对象的人来说是无害的,并且你总是可以通过调用返回到DOM对象$(variable)[0].


Bal*_*usC 5

有没有人知道何时$()使用JQuery 包装对象?

要点:什么时候obj instanceof jQuery返回false.这通常是this和方法参数的情况(除非记录方法,以便参数必须是一个jQuery对象).

所以,如果你有一个this并且你想拥有jQuery函数,那么你需要包装它.例如

function() {
   $this = $(this);
   $this.val();
}
Run Code Online (Sandbox Code Playgroud)

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

function(e) {
    e = $(e);
    e.val();
}
Run Code Online (Sandbox Code Playgroud)

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