2010-05-03 32 views
13

Sau khi sử dụng IE8 tích hợp trong phát triển Công cụ cho lần đầu tiên, tôi nhận thấy jQuery được gắn một thuộc tính cho một số yếu tố của tôi: alt text http://thebe.jtan.com/~vince/stack/jquery.PNGjQuery thuộc tính tự động thêm vào yếu tố

Tôi chưa bao giờ nhận thấy điều này trước đây. Trong thực tế, điều này không hiển thị trong Firebug ... Tôi chỉ nhìn thấy nó lần đầu tiên trong IE8 Developer Tools. Có ai biết những gì jQuery sử dụng này cho, và tại sao nó ẩn trong firebug?

Trả lời

14

The jQuery source khá dễ đọc và bạn có thể xem chức năng của data đang làm.

Để tóm tắt:

  • jQuery có một biến gọi là 'expando' là 'jQuery'+(+new Date)
  • jQuery có một biến gọi là uuid mà bắt đầu với "1"
  • jQuery.cache là một đối tượng rỗng
  • Cài đặt/Lấy bất kỳ "dữ liệu" nào trên một Thành phần/đối tượng HTML sẽ sử dụng thuộc tính expando trên đối tượng để lưu trữ tham chiếu vào jQuery.cache - loại như thế này:

     
    // get the elements cache id, or create a new cache id: 
    var id = elem[expando] || (elem[expando] = uuid++); 
    // get the cache for the element, or create it: 
    var data = jQuery.cache[id] || (jQuery.cache[id] = {}); 
    

  • xử lý sự kiện được lưu trữ trong các eventshandle thuộc tính của đối tượng này nội data.

Vì vậy, bên trong tất cả các thuộc tính được chỉ định sử dụng .data() sử dụng thuộc tính "expando" này trên HTML để lưu khóa vào bộ nhớ cache dữ liệu nội bộ của jQuery. Trình xử lý sự kiện jQuery cũng được lưu trữ trong cùng một bộ nhớ cache này. Giá trị số được gán cho expando là bộ đếm gia tăng tham chiếu vị trí của nó trong đối tượng bộ nhớ cache jQuery.

+0

Câu trả lời hay, cảm ơn! – macca1

0

Tôi nghi ngờ nó bị ẩn trong firebug, vì tôi cũng đã thấy đối tượng dữ liệu jquery trong đó.

Tôi tin rằng jQuery hoặc bất kỳ plugin nào bạn đang sử dụng chỉ thêm vào trong IE dưới dạng sửa chữa/giải pháp cho các lỗi/thiếu sót cụ thể của trình duyệt.

+0

Nó KHÔNG phải là bản sửa lỗi/giải pháp IE - đó là những gì jQuery sử dụng để đính kèm trình xử lý sự kiện và các dữ liệu khác nhau. – gnarf

4

jQuery sử dụng "expando" này để liên kết dữ liệu và sự kiện với đối tượng. Dường như nó hoạt động cùng với bộ nhớ cache dữ liệu và sự kiện. Mặc dù vậy, tôi rất muốn nghe một lời giải thích sâu hơn.

+0

@David Murdoch - Tôi đã cố gắng giải thích chi tiết hơn – gnarf

0

Nếu bạn sử dụng phương thức .html() của jQuery để tìm chuỗi HTML, hãy cẩn thận nếu HTML đó chứa bất kỳ yếu tố nào đã đăng ký sự kiện — bạn có thể nhận được nhiều hơn một chút so với số tiền bạn đã mua.

Không phụ thuộc vào .html() cho đoạn mã XML được định dạng tốt.

Khắc phục nhanh của tôi là thay đổi thứ tự của doanh nghiệp. Tôi chỉ đơn giản đã làm sự kiện jQuery của tôi ràng buộc sau khi dữ liệu đã được gửi đi. Một bài học khó học, sau đó, theo quan điểm của khoảng thời gian tôi đã dành mái tóc của tôi ra, nhưng một điều quan trọng dù sao.

Tôi đoán bạn đang sử dụng 1.3.1 sự cố đã được khắc phục trong các phiên bản sau. Vì vậy, chỉ cần cập nhật và probabaly bạn sẽ được sử dụng tốt.

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