我有一个函数:
function myFunction(){
var id = $(this).attr('id');
}
现在有时候,myFunction 会以 $(this) 作为上下文被调用,但有时候上下文只是 'this'。
如何一行代码实现类似以下效果:
if(this == $(this)){
var e = $(this);
}
这是一个测试,用于确定“this”是jQuery的“this”还是JS的“this”。
可行吗?
我有一个函数:
function myFunction(){
var id = $(this).attr('id');
}
现在有时候,myFunction 会以 $(this) 作为上下文被调用,但有时候上下文只是 'this'。
如何一行代码实现类似以下效果:
if(this == $(this)){
var e = $(this);
}
这是一个测试,用于确定“this”是jQuery的“this”还是JS的“this”。
可行吗?
if (this.jquery) { // refers to jQuery version
// jQuery object
}
或者:
if (this instanceof jQuery) { // prototype chain
// jQuery object
}
然而,正如其他人所说,这并不重要,$(this)
会在this
已经是jQuery
对象或DOM元素的情况下工作。
$()
,那么检查它是否值得是没有意义的,因为 $()
会为你进行检查。 - CaffGeekvar obj = {jquery:1};
哈哈哈哈... :P
- Šime Vidas$(this)
的性能惩罚只有几微秒(百万分之一秒),这意味着它是可以忽略不计的。您可以在一个函数调用中安全地拥有几十个 $(this)
、$(window)
等表达式,而不会影响性能。 - Šime Vidas当 this
是一个jQuery对象或者不是时,你也可以只使用 var e = $(this)
。
一种处理它的方法就是始终将其包装在$(...)
中。像这样包装一个jQuery对象会创建一个克隆(参见jQuery文档),因此这个HTML代码:
<a href="test" id="test-link">Test Link</a>
var link = $('#test-link');
var doubleWrappedLink = $(link);
alert(doubleWrappedLink.attr('href'));
将正确弹出“test”。
$(this)
,它可能不会崩溃。 - Kos$($($($($($($(this)))))))
是有效的代码。我99% 确信 jQuery 会检查它是否已经是 jQuery 对象,如果是,就不会多做无用功。 - CaffGeek[0]
访问DOM元素。 - Šime Vidas