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

gue*_*est 52 javascript jquery

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

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

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

chi*_*NUT 78

是的,$($(this))是相同的$(this),jQuery()或者$()函数是奇妙的幂等.没有理由那个特殊的结构(双层包装this),但是,我用它作为一个快捷方式只从一个组中抓取第一个元素,这涉及类似的双重包装,是

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

相当于,抓取匹配的每个元素selector(返回一个jQuery对象),然后[0]用来抓取列表中的第一个(返回一个DOM对象),然后$()再次将其包装回来将其转换回jQuery对象,这次只包含一个元素而不是一个集合.它大致相当于

document.querySelectorAll('selector')[0];,这几乎是 document.querySelector('selector');

  • 欧文,我相信你会把注意力与注意力混淆.检查[Idempotence](http://en.wikipedia.org/wiki/Idempotence)和[Injection](http://en.wikipedia.org/wiki/Injective_function).无论如何,$()通常不是幂等的,但如果参数是一个jquery对象,它将返回它收到的对象. (8认同)
  • 坦率地说,我发现'$($('selector')[0])`比`$('selector:eq(0)')`甚至`$('selector:first')更难读. ,由于双"构造函数",它会表现更差. (3认同)
  • 我个人更喜欢`$('selector').eq(0)`如果我试图只检索第一个元素作为jquery对象 (3认同)
  • 不完全是幂等.如果给定相同的输入,则幂等函数总是返回相同,因此纯函数自然是幂等的.例如,square(x)是幂等的,但调用square(square(x))将返回不同的结果square(x).从这个意义上讲,jQuery相当擅长于模仿,而不是幂等. (2认同)

sda*_*bet 29

你可以$根据需要多次包装,它不会改变任何东西.

如果foo是DOM元素,$(foo)则返回相应的jQuery对象.

如果foo是jQuery对象,$(foo)则返回相同的对象.

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


Ale*_*s G 8

没有特别需要双层包装,$($(this))并且完全相同$(this).

也就是说,我曾经在我的项目中的一个文件中找到了这个双包装,由另一个开发人员提交.通过修订跟踪更改,结果证明它开始于$($(this).find('selector').first())- 也就是说,某些选择器的结果被包装以创建一个新对象.然后无论出于何种原因,选择器被移除,只剩下双重包裹this.毋庸置疑,在下次提交时它被改为$(this).


kea*_*ine 6

正如我之前所解释的那样,$($(this))并且$(this)完全相同.如果您尝试多次包装它,jQuery将返回相同的jQuery对象.

此外,出于性能考虑,重用jQuery对象是一个好习惯 - 创建jQuery对象非常昂贵,尤其是具有复杂选择器的对象.例:

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

只需google获取'jQuery最佳实践' - 您需要30分钟才能学习这些基础知识,并且您将更有效地使用jQuery方法.