关于javascript:检查’this’是$(this)还是只是普通的’this’

Check if 'this' is $(this) or just plain old 'this'

我有一个功能:

1
2
3
function myFunction(){
var id = $(this).attr('id');
}

现在有时,myFunction被调用$(this)作为上下文,但有时上下文只是'this'。

在一行中我该如何做与此类似的事情:

1
2
3
if(this == $(this)){
var e = $(this);
}

基本上是一个测试,看看'this'是jQuery'this'还是JS'this'。

可能?


1
2
3
if (this.jquery) { // refers to jQuery version
  // jQuery object
}

或者:

1
2
3
if (this instanceof jQuery) { // prototype chain
  // jQuery object
}

但是,正如其他人所说,无论如何,无论$(this)jQuery对象还是DOM元素,$(this)都能正常工作。


this是jQuery对象时,或者如果不是jQuery对象,您也可以执行var e = $(this)


处理它的一种方法就是始终将其包装在$(...)中。 包装这样的jQuery对象会创建一个克隆(请参阅jQuery文档),所以这个HTML:

1
Test Link???????????????????????

用这个JS:

1
2
3
4
?var link = $('#test-link');
var doubleWrappedLink = $(link);

alert(doubleWrappedLink.attr('href'));???????

将正确弹出"测试"。


您可以使用以下代码段:

1
if (obj instanceof jQuery || 'jquery' in Object(obj)) { }

看一下:检查对象是否是jQuery对象