2009-09-09 28 views
75

Tôi muốn liên kết đối tượng JavaScript với phần tử HTML. Có một cách đơn giản để làm điều này?Có cách nào tốt để đính kèm các đối tượng JavaScript vào các phần tử HTML không?

Tôi nhận thấy HTML DOM xác định phương thức setAttribute và có vẻ như điều này được xác định cho tên thuộc tính tùy ý. Tuy nhiên, điều này chỉ có thể đặt giá trị chuỗi. (Bạn có thể sử dụng tất nhiên này để khóa cửa vào từ điển.)

chi tiết cụ thể (mặc dù tôi chủ yếu quan tâm đến các câu hỏi chung):

Cụ thể, tôi có các phần tử HTML đại diện cho các nút trong một cây và tôi đang cố gắng cho phép kéo và thả, nhưng sự kiện thả jQuery sẽ chỉ cho tôi các phần tử được kéo và thả.

Mẫu thông thường để nhận thông tin cho trình xử lý sự kiện dường như là tạo các phần tử HTML cùng lúc khi bạn tạo đối tượng JavaScript và sau đó xác định trình xử lý sự kiện bằng cách đóng các đối tượng JavaScript này quá tốt trong trường hợp này (tôi có thể có một đối tượng toàn cầu được phổ biến khi kéo một bắt đầu ... nhưng điều này cảm thấy hơi khó chịu).

Trả lời

35

Bạn đã xem phương thức jQuery data() chưa? Bạn có thể gán các đối tượng phức tạp cho phần tử nếu bạn muốn hoặc bạn có thể tận dụng phương thức đó để giữ một tham chiếu đến một đối tượng (hoặc một số dữ liệu khác) ít nhất.

+7

Cảm ơn bạn: Điều này là khá nhiều những gì tôi đang tìm kiếm. Thật thú vị khi xác định phương thức này jquery lưu khóa vào một từ điển toàn cầu trong một thuộc tính chuỗi trên mỗi phần tử. Tên của thuộc tính chuỗi này được tạo ngẫu nhiên khi jquery được nạp lần đầu tiên. (Gợi ý rằng không có cách nào tốt để làm ở đó không phải là cách tốt hơn để thực hiện điều này chỉ bằng DOM) – user47741

+3

Cần lưu ý rằng dữ liệu 'data()' * của jQuery hoạt động bằng cách sử dụng câu trả lời ] (http://stackoverflow.com/a/1402782/42921) vì vậy nếu bạn chưa sử dụng jquery, bạn cũng có thể sử dụng nó. –

+4

Hài hước làm thế nào tôi có thể nhìn lại câu trả lời này 6 năm sau đó và nghĩ rằng, "đây là một câu trả lời rất tối ưu. @bobince nên có một chấp nhận". –

79

Đối tượng JavaScript có thể có thuộc tính tùy ý được chỉ định cho chúng, bạn không cần phải làm gì đặc biệt để cho phép. Điều này bao gồm các phần tử DOM; mặc dù hành vi này không phải là một phần của tiêu chuẩn DOM, nó đã trở thành trường hợp quay lại các phiên bản JavaScript đầu tiên và hoàn toàn đáng tin cậy.

var div= document.getElementById('nav'); 
div.potato= ['lemons', 3]; 
+3

@ tat.wright - Các thuộc tính tùy ý trên các phần tử HTML mà anh ta nói đến được gọi là thuộc tính Expando. Cũng lưu ý rằng div.potato không có nghĩa là div.getAttribute ("khoai tây") – nickytonline

+2

Nó không hoàn toàn đáng tin cậy chút nào. Ví dụ: một lệnh gọi 'document.expando = false' trong IE ngăn tất cả các thuộc tính expando trên các phần tử HTML trong tài liệu. –

+33

@Tim Down: sau đó chỉ cần không làm điều đó. Tôi không thấy lý do tại sao nó không phải là đáng tin cậy - nó giống như nói rằng đối tượng String là không đáng tin cậy, bởi vì bạn có thể thiết lập nó để null. – simon

Các vấn đề liên quan