有没有理由对$(jQuery)进行嵌套调用?

时间:2016-07-18 03:53:57

标签: javascript jquery

当我遇到像这样的代码时,我正在浏览网站的源代码:

$($('#newForm_step1')).hide("slide", { direction: "left" }, 0);

和此:

$($($('.breadcrumbs')[0]).children().last()).html("...");

我从未见过以这种方式使用的$jQuery)函数,我想知道是否有任何实际的理由去做这样的事情?据我所知,通过调用$来包装jQuery对象只是为同一个选择器返回一个jQuery对象,jQuery对象上的方法返回this,所以我不明白为什么一个需要嵌套调用$

2 个答案:

答案 0 :(得分:1)

不,没有理由这样做。

在第一个示例中,$($(...))是多余的。将jQuery对象立即包装在另一个jQuery对象中绝对没有效果。

该行应为

$('#newForm_step1').hide("slide", { direction: "left" }, 0);

在第二个示例中,$(...)[0]返回一个原始DOM元素,因此在调用jQuery的.children().last()之前将其重新包装。结果就是jQuery对象,所以没有必要重新包装它,并且"展开"可以通过调用.first()而不是[0]来避免。

该行应为

$('.breadcrumbs').first().children().last().html("...");

答案 1 :(得分:0)

没有必要用jQuery包装jQuery对象。这只会导致相同但过度编码和冗余。

但是当你有DOM对象时,你需要用jQuery包装,这样它就会成为jQuery对象。

举个例子:

$('.breadcrumbs')[0];//[0] converts to JavaScript Object

现在,如果你想再次使用jQuery,你可以用jQuery包装:

$($('.breadcrumbs')[0]);//is now a jQuery Object

但是这个例子是不必要的,因为你可以这样做:

$('.breadcrumbs:eq(0)');//selects first .breadcrumbs element

但是,如果你有一些DOM Object而不是jQuery对象,那么你需要jQuery包装器来处理jQuery方法。

你必须记住这一点:

JavaScript Object需要链接JavaScript方法:

javascriptObject.javascriptMethods

实施例 -

$('.breadcrumbs')[0].addEventListener();//javascript addEventListener method

jQuery Object需要链接jQuery方法:

jQueryObject.jQueryMethods

实施例 -

$('.breadcrumbs').on();//jQuery on method
相关问题