2011-12-25 26 views
5

Tôi cố gắng để sử dụng phương pháp data (jQuery 1.7.1) trong mã này:Thêm dữ liệu tùy chỉnh cho một nút mới trong Jquery không hoạt động

var q = '<div class="form-error-marker"></div>'; 
var t = $(q).data('message', message).insertAfter(el); 

và nó không hoạt động.

Lưu ý rằng công trình này:

var t = $(q).attr('data-message', message).insertAfter(el); 

Tại sao phiên bản đầu tiên không làm việc?

EDIT: insertAfter hoạt động chính xác và div mới được thêm sau el (là trường hợp của một phần tử mà tôi nhận được theo hàm getElementById(); ngắn câu chuyện tôi có thư viện mà tôi mở rộng).

Khi tôi nói 'nó không hoạt động' có nghĩa là thuộc tính 'dữ liệu-tin nhắn' không được lưu trữ.

+0

+1 Tôi có cùng một vấn đề. – Bojangles

+1

"Không hoạt động" nghĩa là gì? 'El' có chứa nhiều hơn một phần tử không? – SLaks

+0

SLaks: hãy xem cập nhật câu hỏi, vui lòng. –

Trả lời

7

Sử dụng data như thế sẽ đặt một đoạn dữ liệu tùy ý cho nút này; nó không thêm thuộc tính data- mới. Chỉ cần thêm thuộc tính với attr chức năng, và sau đó truy cập nó với data

var q = $('<div class="form-error-marker"></div>').attr("data-message", message); 

Bây giờ truy cập vào nó như thế này:

var message = q.data("message"); 

Dưới đây là một fiddle

+0

"Sử dụng dữ liệu như vậy đặt một phần dữ liệu tùy ý cho nút này" Tôi không hiểu câu này. Nó có nghĩa là gì? Cảm ơn! –

+0

@MartyIX - hãy xem tài liệu về hàm dữ liệu http://api.jquery.com/data/ Về cơ bản, bạn có thể đính kèm dữ liệu tùy ý vào bất kỳ phần tử dom nào có dữ liệu ('khóa', 'giá trị'). Bạn có thể lấy các giá trị này bằng cách nói .data ('key'); Như của jQuery 1.4.3, nói .data ('key') sẽ không chỉ tìm các giá trị đã đặt trước đó được thiết lập với .data ('key', 'value') mà còn tìm trong thuộc tính dữ liệu html5 –

+0

Đây không phải là cách ' dữ liệu() 'nên được sử dụng. Mã OP hoạt động. Lỗi ở nơi khác hoặc anh/cô ấy đang cố gắng truy cập 'attr ('data-message')' sau khi thiết lập dữ liệu, điều này cũng sai. – Popnoodles

2

Khi bạn sử dụng jQuery.data bạn don không thay đổi thuộc tính phần tử, thay vào đó dữ liệu của bạn được lưu trong $.cache. Vì vậy, nếu bạn muốn thay đổi thuộc tính phần tử, hãy sử dụng jQuery.attr, khi bạn muốn lưu một số thông tin, hãy sử dụng jQuery.data

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