我在网上看到一些代码使用了以下语句
if ($($(this)).hasClass("footer_default")) {
$('#abc')
.appendTo($(this))
.toolbar({position: "fixed"});
}
$($(this))
的作用是什么,为什么在这里需要使用它?
我在网上看到一些代码使用了以下语句
if ($($(this)).hasClass("footer_default")) {
$('#abc')
.appendTo($(this))
.toolbar({position: "fixed"});
}
$($(this))
的作用是什么,为什么在这里需要使用它?
是的,$($(this))
和 $(this)
是一样的,jQuery()
或者 $()
函数是非常幂等的。然而,这种特定的构造(双重包装的 this
)没有什么理由,不过我使用它作为一个快捷方式来仅仅获取组中的第一个元素,这涉及到类似的双重包装,如下:
$($('selector')[0])
它的意思是,选择与 selector
匹配的每个元素(返回一个 jQuery 对象),然后使用 [0]
来获取列表中的第一个元素(返回一个 DOM
对象),然后再次使用 $()
将其包装回一个 jQuery 对象,这次只包含一个元素而不是一个集合。它大致相当于:
document.querySelectorAll('selector')[0];
,这几乎等同于 document.querySelector('selector');
$('selector:eq(0)')
жҲ–иҖ…$('selector:first')
пјҢжҲ‘и®Өдёә$($('selector')[0])
йҡҫд»Ҙйҳ…иҜ»пјҢдё”жҖ§иғҪиҫғе·®пјҢеӣ дёәе®ғдҪҝз”ЁдәҶеҸҢйҮҚ"жһ„йҖ еҮҪж•°"гҖӮ - UweB$ ('selector').eq(0)
。 - George无论你把 $
包裹多少次,它都不会改变任何东西。
如果 foo
是一个 DOM 元素,$(foo)
将返回相应的 jQuery 对象。
如果 foo
是一个 jQuery 对象,$(foo)
将返回同一个对象。
这就是为什么 $($(this))
返回的结果与 $(this)
完全相同。
没有必要进行双重包装,$($(this))
与$(this)
完全相同。
尽管如此,在我的项目中,我曾经发现另一个开发人员在一个文件中使用了双重包装。通过版本跟踪更改,结果发现它最初是$($(this).find('selector').first())
- 也就是说,某个选择器的结果被包装成一个新对象。然后由于某些原因,选择器被删除,只剩下this
的双重包装。不用说,在下一次提交时,它被更改为$(this)
。
如前所述,$($(this))
和$(this)
是完全相同的。如果您尝试多次包装它,则jQuery将返回相同的jQuery对象。
此外,出于性能考虑,重用jQuery对象是一个好习惯 - 创建jQuery对象非常昂贵,特别是具有复杂选择器的对象。例如:
var $this = $(this);
if ($this.hasClass("footer_default")) {
$('#abc')
.appendTo($this)
.toolbar({position: "fixed"});
}
只需在Google上搜索'jQuery最佳实践'-这将花费您30分钟时间来学习这些基础知识,您将更有效地使用jQuery。
$(this)
和 $($(this))
都返回 jQuery 对象。
这两者之间没有区别。
这样做没有意义。
以下代码返回相同结果:
console.log($($(this)).hasClass("footer_default"))
console.log($(this).hasClass("footer_default"))
根据所选元素是否具有类名footer_default
,返回布尔值:
.hasClass( className )返回:布尔值
$(this)
分配给一个本地变量一次比多次使用$(this)
更有效率。 - Alvin Wong