$($(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对象。
这两者没有区别。