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');
sda*_*bet 29
你可以$根据需要多次包装,它不会改变任何东西.
如果foo是DOM元素,$(foo)则返回相应的jQuery对象.
如果foo是jQuery对象,$(foo)则返回相同的对象.
这就是为什么$($(this))返回完全相同的原因$(this).
没有特别需要双层包装,$($(this))并且完全相同$(this).
也就是说,我曾经在我的项目中的一个文件中找到了这个双包装,由另一个开发人员提交.通过修订跟踪更改,结果证明它开始于$($(this).find('selector').first())- 也就是说,某些选择器的结果被包装以创建一个新对象.然后无论出于何种原因,选择器被移除,只剩下双重包裹this.毋庸置疑,在下次提交时它被改为$(this).
正如我之前所解释的那样,$($(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方法.
| 归档时间: |
|
| 查看次数: |
4171 次 |
| 最近记录: |