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对象