2011-08-20 63 views
7
var myVar = $([]); 

jQuery做了什么?

它是否将变量初始化为空的jQuery集?我已经搜索了jQuery文档,但没有找到这种语法的解释。从jQuery文档http://api.jquery.com/jQuery/

返回一个空集

摘录 -

对于jQuery 1.4,调用无参数jQuery的()方法返回一个空的jQuery集合(具有的长度属性0)。在之前的jQuery版本中,这将返回一个包含文档节点的集合。

那么$([])可能是传统的方法来返回一个空的jQuery集或做一些完全不同的东西吗?

+4

遗产(从旧代码或旧习惯)和/或显式(通过选择/偏好),是的。皮肤有不同的方法去皮肤。 (它确实创建了一个新的“空”jQuery对象。) – 2011-08-20 18:48:51

+2

你已经回答了你自己的问题。 –

+0

;)很确定。感谢您的确认! –

回答

1

虽然有不同的方式来解释“遗产”(如在pst的评论),表达式是精确记录。我们知道,$功能是一样的jQuery因此要查找jQuery我们看到它可以在几种不同的形式接受参数:

  • jQuery(selector, [context])
  • jQuery(element)
  • jQuery(elementArray)
  • jQuery(jQueryObject)
  • jQuery()

所述一个接受元件阵列进行了说明,像这样:

  • elementArray:含组DOM元素在一个jQuery对象来包装的数组。

这个回答你的问题“这样可以$([])是传统方法,返回一个空的jQuery集合或它做完全不同的事情?”在这个意义上,不,它没有做任何不同的事情。你得到一个jQuery对象,其中包含空数组中的所有元素。他们全部为零。

正如您在1.4中提到的那样,普通ol'$()为您提供了空集,因此我认为它可能是现在做事的首选方式。这就是说,$([])是很好的和明确的,仍然支持。

1

$(obj)允许你创建一个空的jQuery对象,但这是不同$()

例如:我有一个命名空间的解决方案,需要有基于一个集中的对象上采取行动自定义事件。我已经写了我自己的EventHandler类,基本上围绕私人$({})

这使我有一个对象,可以充当我的事件持有人和触发器。我在我的EventHandler类中公开bind(),unbind()和trigger()。

$()另一方面不允许您绑定和触发,因为没有基础对象。我不能完全确定他们有这样的想法,因为它会更有意义有“默认”或“空”的jQuery对象是$({})

长话短说:有事情$({})这是否$()不。但$([])$()似乎行动相同从我做的最小的量测试。也许$(new Array())行为仍然不同,但我不在乎研究它。

编辑与例如:

var testA = $(); 
testA.bind('customEvent', function() { alert('empty custom'); }); 
testA.trigger('customEvent'); // will not get an alert 

var testB = $({}); 
testB.bind('customEvent', function() { alert('object custom'); }); 
testB.trigger('customEvent'); // will get an alert 


var testC = $([]); 
testC.bind('customEvent', function() { alert('array custom'); }); 
testC.trigger('customEvent'); // acts like testA 
+0

你会在空的一组节点上绑定或触发什么? –

+0

'[]'是一个'Object'。例如:我的代码有一些事件,比如我的JS数据加载模块触发的'myDataLoaded'。由于该模块不是DOM对象,因此它没有自己的一组事件,因为我不想继续通过模块搜索事件,只是将其注册到我的有点全局的事件处理程序对象中。这样,其他模块可以订阅我的自定义事件,而无需知道触发或触发的来源。 –

+0

'[]'是一个数组对象,是的。所以? '$()'给你一个对象,就像'$([])'一样。 –

相关问题