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'。
可能?
		
		
- 
如果你以任何方式做$(this),它可能不会爆炸。
 
- 
这并不重要。 这是有效的$($($($($($($(this))))))) 。 我99%肯定jQuery会检查你,如果它已经是一个jQuery对象,就不会做额外的工作。
 
- 
考虑有一个关于该函数的上下文类型的约定。 如果您有一个jQuery对象,则可以使用[0]访问DOM元素。
 
- 
stackoverflow.com/questions/1853223/&hellip重复;
 
- 
顺便说一句,你说错了:Basically a test to see if 'this' is a jQuery 'this' or a 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)都能正常工作。
		
		
- 
但是,我不认为值得检查一下,如果你只是将它传递给$(),因为它会为你做检查。
 
- 
var obj = {jquery:1}; TROLOLOLO ...... :P
 
- 
做Joã o版本之间的性能差异,以及仅仅在jQuery中包含'this'上下文($ thisContext = $(this);)会有多大意义吗?是否有任何理由(除了明确地想要或不想要一个jQuery对象)之外,有人会更喜欢一种方法吗?
 
- 
@Teeg评估表达式$(this)的性能损失是几微秒(百万分之几秒),这意味着它可以忽略不计。在一个函数调用中,您可以安全地拥有几十个$(this),$(window)等表达式,而不会影响性能。
 
- 
@Sime Vidas我有一种感觉就是这样。 Joao的回答非常有意义并且很好,但对于我遇到的大多数情况,我倾向于只包装$(this)。
 
- 
@Teeg:我同意你的意见,我实际上在我的回答中添加了这个建议,即使问题明确要求检测jQuery对象的方法。
 
 
	  
当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对象