为什么从另一个jQuery对象创建一个jQuery对象?

为什么从另一个jQuery对象创建一个jQuery对象?

问题描述:

一旦你有一个jQuery对象一样,你做得到:为什么从另一个jQuery对象创建一个jQuery对象?

var car = $('li .car'); 

我看到代码执行以下操作:

var carChildren = $(car).children('span'); 

是什么的地步了吗? 为什么不在刚才的jQuery var车上使用.children方法就像这样?

var carChildren = car.children('span'); 
+6

这一点是*错误的用法*。不要这样做。 – eisbehr

+1

重新创建现有对象的jquery对象是没有意义的。使用第二种方法。 –

+1

当你正在制作一个接受字符串选择器,jquery对象,dom节点等的多态函数时,他/她可能需要它'function doSmthToCar(car){$(car).children(...)}',即使你正在传递jquery对象'var car = $(); doSmthToCar(汽车)'。否则,这只是一个错误的用法。 –

简而言之:
没有理由这样做。但结果也没有什么不同。这基本上只是不好的做法。所以不要这样做。


TL; DR
正如前面所说的,这是没有意义,它使没有什么区别。让我们思考一下这些线路的作用。需要明确的是,我们把它写在一行:

var car = $('li .car'); 
var carChildren = $(car).children('span'); 

是一样的:

var carChildren = $($('li .car')).children('span'); 

没有人会做这种方式!有人会写$(car)的原因是,他们很容易被$(this)之类的东西所迷惑,后来经常写很多次。

为什么它工作呢?

如果你写$(car) jQuery会注意到car已经是一个jQuery对象,并将其替换为它的上下文。但是这是一项不必要的任务,可以保存。

这就是说,你也可以直接使用car作为上下文。

var carChildren = $('span', car); 
+1

灵活性可能被视为一种奖励,但它确实可以让你做一些疯狂愚蠢的事情。 – Nelson