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

时间:2014-02-10 07:16:26

标签: javascript jquery

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

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

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

6 个答案:

答案 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

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

答案 5 :(得分:3)

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

这两者之间没有区别。