$($(this))是什么意思?

我看到一些使用以下语句的Web代码

if ($($(this)).hasClass("footer_default")) { $('#abc') .appendTo($(this)) .toolbar({position: "fixed"}); } 

$($(this))的用途是什么?为什么这里有必要?

是的, $($(this))$($(this))是一样的, jQuery()$()函数是非常幂等的 。 这个特定的构造没有任何理由(这是双重包装),然而,我只是用一个组合来抓取第一个元素的快捷方式,它涉及类似的双重包装,

$($('selector')[0])

抓住匹配selector每个元素(返回一个jQuery对象),然后使用[0]获取列表中的第一个元素(返回一个DOM对象),然后再将其包装在$()以转向它回到了一个jQuery对象,这个时候只包含一个元素而不是一个集合。 这大致相当于

document.querySelectorAll('selector')[0]; ,这是相当多的document.querySelector('selector');

你可以多次打包$ ,它不会改变任何东西。

如果foo是一个DOM元素, $(foo)将返回相应的jQuery对象。

如果foo是一个jQuery对象, $(foo)将返回相同的对象。

这就是为什么$($(this))将返回与$(this)完全相同的原因。

没有特定的双重包装需求, $($(this))$(this)完全相同。

也就是说,我曾经在另一个开发人员的项目中发现了这个双重包装的文件。 跟踪通过修改的变化,结果它开始为$($(this).find('selector').first()) – 也就是说,一些select器的结果被包装来创build一个新的对象。 然后,无论出于何种原因,select器都被移除了,只剩下双重包装了。 不用说,在下一次提交时,它被改为$(this)

如前所述, $($(this))$(this)是完全相同的。 如果您尝试多次包装它,jQuery将返回相同的jQuery对象。

此外,出于性能方面的考虑,重用jQuery对象是一个很好的做法 – 创buildjQuery对象,特别是带有复杂select器的对象是相当昂贵的。 例:

 var $this = $(this); if ($this.hasClass("footer_default")) { $('#abc') .appendTo($this) .toolbar({position: "fixed"}); } 

只是谷歌'jQuery的最佳实践' – 这将需要30分钟的时间来学习这些基础知识,你会更有效地使用jQuery的方式。

没有这样做的meainig。

下面的代码返回相同的:

 console.log($($(this)).hasClass("footer_default")) console.log($(this).hasClass("footer_default")) 

布尔值取决于所选元素是否具有类footer_default

.hasClass(className)返回:Boolean

演示: http : //jsfiddle.net/IrvinDominin/aSzFn/

$(this)$($(this))都返回jquery对象。

这两者没有区别。