2012-01-23 36 views
1

我意识到,给出以下:k的JQuery不一致?

foo = {a:'aa', b:'bb'} 

$.each(foo, function(k,v) { ... 
$(foo).each(function(k,v) { ... 

的值,v是在两种情况下不同。难道我是奇怪的还是jquery不一致?

编辑

如果你来这里要说明一下。每个$和$(FOO)。每个之间的区别,我要澄清的是,我知道两者之间的区别。

+0

'$(foo).each(...'在foo是一个普通对象时不起作用,它不会迭代它的属性......当你需要迭代属性对象,我推荐'Objec t.keys(foo).forEach(...'。 –

+0

简单对象是什么意思?我将foo视为字典/散列表/散列 – disappearedng

+0

普通对象是从对象文字(如上例中的'foo')创建的对象。从对象文字创建的对象通常被称为对象。然而,因为函数和数组也是对象,所以我们说“普通对象”强调它不是其中之一,而是一个简单的对象。 (函数,数组,宿主对象等都是具有附加特殊功能的对象,普通对象是唯一不*有特殊行为的对象。) –

回答

3

根据jQuery()文档的"Working with plain objects"部分,有许多选项,但使用.each()进行枚举不是其中之一。

正与普通对象

目前,支撑在包裹在jQuery的普通的JavaScript对象的唯一操作是:.data().prop().bind().unbind().trigger().triggerHandler()。在普通对象上使用.data()(或任何需要.data()的方法)将在对象上产生一个名为jQuery{randomNumber}(例如jQuery123456789)的新属性。

您应该使用通用的$.each()枚举器。

+1

是的我认为假设每个函数都可以应用两种方式是一个很大的错误 – disappearedng

+0

@disappearedng:直到你问,我不知道你可以传递一个对象作为第一个参数。国际海事组织,jQuery的功能是太过于负担不同的行为。 – 2012-01-23 00:47:51

0

foo alone是一个对象字面值,$(foo)是一个jQuery对象。

0

它是因为你用第二种方法“选择”对象(即DOM东西),而不是迭代对象。

+0

@disappearedng - 我检测到一些讽刺吗? –

0

在你的第一个例子你迭代这相当于一个对象:

$.each(foo, function(key, value) {... 

和你的第二个例子,你迭代选择DOM节点,这相当于

$(foo).each(function(index, element) {... 

我希望清理东西