3

我有一个功能:

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

现在有时,myFunction 会以 $(this) 作为上下文调用,但有时上下文只是“this”。

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

if(this == $(this)){
var e = $(this);
}

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

可能的?

4

4 回答 4

12
if (this.jquery) { // refers to jQuery version
  // jQuery object
}

或者:

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

但是,正如其他人所说,这并不重要,$(this)无论是否this已经是jQuery对象或 DOM 元素都可以。

于 2012-08-21T15:58:31.803 回答
3

你也可以只做var e = $(this)whenthis是一个 jQuery 对象,或者如果它不是。

于 2012-08-21T15:59:50.580 回答
2

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

<a href="test" id="​​​​​​​​​​​​​​​​​​​​​​​​​test-link">Test Link</a>​​​​​​​​​​​​​​​​​​​​​​​

用这个 JS:

​var link = $('#test-link');
var doubleWrappedLink = $(link);

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

将正确弹出“测试”。

于 2012-08-21T16:04:04.323 回答
0

您可以使用以下代码段:

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

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

于 2014-07-28T23:05:36.683 回答