2012-03-11 60 views
5

Có thể sử dụng đối tượng phần tử jQuery làm khóa mảng/đối tượng không?Sử dụng đối tượng phần tử jQuery làm khóa mảng?

Ví dụ:

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

Làm a:

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

chỉ báo cáo [đối tượng Object]

Có nói rằng tôi có thể thực sự sử dụng lại k như jQuery gốc đối tượng phần tử?

+0

Bạn cuối cùng hy vọng đạt được điều gì? Vì 'el' là một đối tượng, nếu bạn muốn liên kết' 'một cái gì đó kỳ lạ "' với đối tượng đó, tại sao không chỉ thêm một thuộc tính vào đối tượng? –

+0

@amnotiam Đây là một ví dụ đơn giản. Việc sử dụng thực tế sẽ là tôi cần một loạt các els, do đó, nó sẽ không làm việc để thêm một tài sản cho nó. –

+0

Nếu bạn cần một mảng của els không phải là chỉ 'var test = []; test.push (el); // etc'? – nnnnnn

Trả lời

7

Không, điều đó là không thể.

ECMAscript chỉ cho phép strings làm khóa-giá trị cho các đối tượng.


Điều bạn có thể làm thay vào đó, là sử dụng id value từ một nút duy nhất thay thế. Vì vậy, nó có thể trông như

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

Điều đó tất nhiên đòi hỏi các nút để có một giá trị id.

+0

Phải, được rồi. Vâng, tôi đoán tôi sẽ phải tạo một ID chung cho các mục đích của mình; đủ đơn giản. –

+0

Id là thuộc tính "id" trên phần tử hoặc nó là cái gì khác? – hfossli

0

Khi bạn sử dụng $.each([],function(i,v)){} i là chỉ mục và v là giá trị.

+0

OP biết điều đó. Câu hỏi đặt ra là tại sao chỉ mục được báo cáo là '" [object Object] "' ​​(lưu ý rằng trong trường hợp này, "index" là tên khóa hoặc thuộc tính, OP được làm việc với một đối tượng thuần không phải là mảng), có thể trong JS để sử dụng một đối tượng làm tên thuộc tính. – nnnnnn

0

Bạn đang thấy đối tượng được chuyển đổi thành một chuỗi ('[object Object]') ngay sau khi bạn cố gán nó làm khóa mảng. Đối với các băm đơn giản, bạn có thể định hình lại chúng thành một khóa:

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

Nói chung, mặc dù, bạn sẽ muốn tránh điều này. Bạn có thể sử dụng các mảng song song chứa các đối tượng và thông điệp, thay vào đó:

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

Tôi nghĩ bạn cần phải xác định đối tượng và sau đó đẩy vào mảng.

var obj = {}; 
obj[foo] = 'bar'; 
ary.push(obj); 
Các vấn đề liên quan