我在网上看到了一些使用以下语句的代码
if ($($(this)).hasClass("footer_default")) {
$('#abc')
.appendTo($(this))
.toolbar({position: "fixed"});
}
$($(this))
有什么用?为什么这里有必要?
答案 0 :(得分:78)
是的,$($(this))
与$(this)
相同,jQuery()
或$()
功能非常出色idempotent。没有理由这种特殊的结构(this
的双重包装),但是,我用它作为一个快捷方式只从一个组中抓取第一个元素,这涉及类似的双重包装,是
$($('selector')[0])
相当于,抓取匹配selector
的每个元素(返回jQuery对象),然后使用[0]
抓取列表中的第一个元素(返回DOM
对象),然后再次将其包装在$()
中,将其转换回jQuery对象,这次只包含一个元素而不是一个集合。它大致相当于
document.querySelectorAll('selector')[0];
,这几乎是
document.querySelector('selector');
答案 1 :(得分:29)
你可以根据需要多次包装$
,它不会改变任何东西。
如果foo
是DOM元素,$(foo)
将返回相应的jQuery对象。
如果foo
是jQuery对象,$(foo)
将返回相同的对象。
这就是$($(this))
返回与$(this)
完全相同的原因。
答案 2 :(得分:8)
没有特别需要双重包装,$($(this))
与$(this)
完全相同。
也就是说,我曾经在我的项目中的一个文件中发现了这个双包装,由另一个开发人员提交。通过修订跟踪更改,结果发现它以$($(this).find('selector').first())
开始 - 也就是说,某个选择器的结果被包装以创建一个新对象。然后由于某种原因,选择器被移除,只剩下this
的双重包裹。毋庸置疑,在下次提交时,它已更改为$(this)
。
答案 3 :(得分:6)
如前所述,$($(this))
和$(this)
完全相同。如果你尝试多次包装它,jQuery会返回相同的jQuery对象。
此外,出于性能考虑,重用jQuery对象是一个好习惯 - 创建jQuery对象非常昂贵,尤其是具有复杂选择器的对象。例如:
var $this = $(this);
if ($this.hasClass("footer_default")) {
$('#abc')
.appendTo($this)
.toolbar({position: "fixed"});
}
只需google获取'jQuery最佳实践' - 您需要花费30分钟来学习这些基础知识,并且您将更有效地使用jQuery方法。
答案 4 :(得分:3)
没有这样做的重要性。
以下代码返回相同的内容:
console.log($($(this)).hasClass("footer_default"))
console.log($(this).hasClass("footer_default"))
如果所选元素具有类footer_default
:
.hasClass(className)返回:Boolean
答案 5 :(得分:3)
$(this)
和$($(this))
都返回jquery对象。
这两者之间没有区别。