2012-03-11 20 views
5

Czy możliwe jest użycie obiektu elementu jQuery jako klucza tablicy/obiektu?Użyj elementu jQuery jako klucza tablicy?

Przykład:

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

Doing a:

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

właśnie donosi [object Object]

Czy istnieje powiedzieć, że faktycznie mogła ponownie wykorzystać k jako oryginalnego jQuery element obiektu?

+0

Co ostatecznie zamierzasz osiągnąć? Skoro "el" jest obiektem, jeśli chcesz skojarzyć "coś dziwnego" z tym obiektem, dlaczego po prostu nie dodasz właściwości do obiektu? –

+0

@amnotiam To był uproszczony przykład. Rzeczywistym użyciem będzie to, że potrzebuję tablicy els, więc nie będzie działało dodawanie do niej właściwości. –

+0

Jeśli potrzebujesz tablicy els, nie jest to po prostu 'var test = []; test.push (el); // etcetat? – nnnnnn

Odpowiedz

7

Nie, to niemożliwe.

ECMAscript dopuszcza tylko strings jako pary klucz-wartość dla obiektów.


Zamiast tego można zamiast tego użyć id value z jednego węzła. Może to wyglądać tak, jakby to było wymagane, aby węzeł miał wartość identyfikatora.

+0

Dobrze, dobrze. Cóż, myślę, że będę musiał wygenerować ogólny identyfikator do moich celów; wystarczająco proste. –

+0

Identyfikator jest atrybutem "id" na elemencie, czy jest to coś innego? – hfossli

0

Podczas korzystania z $.each([],function(i,v)){} i jest indeksem, a v jest wartością.

+0

OP o tym wie. Pytanie brzmi, dlaczego indeks jest zgłaszany jako "[obiekt obiektu]" (zwracając uwagę, że w tym przypadku "indeks" jest kluczem lub nazwą właściwości, biorąc pod uwagę, że OP działa z czystym obiektem, a nie tablicą) i czy jest to możliwe w JS, aby użyć obiektu jako nazwy właściwości. – nnnnnn

0

Widzisz obiekt przekonwertowany na ciąg znaków ('[object Object]') zaraz po próbie przypisania go jako klucza tablicy. W przypadku prostych skrótów, można conceivably szeregować je w kluczu:

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

Generalnie jednak, będziemy chcieli, aby uniknąć tego rodzaju rzeczy. Możesz użyć równoległych tablic zawierających obiekty i komunikaty: zamiast tego:

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

Myślę, że musisz zdefiniować obiekt, a następnie przejść do tablicy.

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