2012-03-11 41 views
5

是否可以使用jQuery元素对象作为数组/对象键?使用jQuery元素对象作为数组键?

例子:

var el = jQuery(this); 
var test = {}; 
test[el] = "something strange"; 

做一个:

jQuery.each(test, function(k,v){ 
    console.log(k); 
}); 

刚刚报告的翻译:

有没有说,我其实可以重复使用k作为原始的jQuery元素对象?

+0

你最终希望完成什么?因为'el'是一个对象,所以如果你想把''一些奇怪的东西'与那个对象联系起来,为什么不直接给对象添加一个属性呢? – 2012-03-11 23:08:12

+0

@amnotiam这是一个简单的例子。实际的用法是我需要一个els数组,所以它不会为它添加一个属性。 – 2012-03-11 23:51:05

+0

如果你需要一个els数组,那不就是'var test = []; test.push(EL); // etc'? – nnnnnn 2012-03-12 00:39:16

回答

7

不,这是不可能的。

ECMAscript只允许strings作为对象的键值。


你可以做的是改用id value而不是单个节点。所以它可能看起来像

var el = jQuery(this); 
var test = {}; 
test[this.id] = "something strange"; 

这当然需要节点有一个id值。

+0

对,好吧。那么,我想我必须为我的目的生成一个通用的ID;够简单。 – 2012-03-11 23:12:25

+0

id是元素上的属性“id”还是别的? – hfossli 2013-01-21 15:24:15

0

当您使用$.each([],function(i,v)){} i是索引,v是值。

+0

OP知道。问题是为什么索引被报告为“[object object]”(注意,在这种情况下,“索引”是键或属性名称,因为OP使用普通对象而不是数组),是吗?可能在JS中使用对象作为属性名称。 – nnnnnn 2012-03-12 00:33:47

0

只要您尝试将对象分配为数组键,就会看到对象已转换为字符串('[object Object]')。对于简单的哈希,你可以想象将它们序列化为一个键:

var obj = { foo: 'bar' }, 
    key = JSON.stringify(obj), 
    obj2 = { key: 'something strange' }; 

虽然,你一定要避免这种事情。你可以使用包含对象和消息的并行数组,而不是:

var keys = [ {foo: 'bar'}], 
    values = [ 'something strange' ]; 
-1

我认为你需要定义一个对象,然后推到数组。

var obj = {}; 
obj[foo] = 'bar'; 
ary.push(obj);