2010-07-23 30 views
6

Tôi đang sử dụng IE8 và jQuery 1.4.2. Trang web của tôi không còn hiển thị chính xác nữa và giao diện nhanh trong trình gỡ lỗi tại HTML cho thấy rằng mọi thành phần hiện có thuộc tính mới được gọi là "jQuery1279875396122", có giá trị là một số nguyên nhỏ, rõ ràng là duy nhất cho mỗi nút.jQuery đang thêm thuộc tính lạ vào các nút

Nhìn vào nguồn jQuery tôi có thể thấy rằng số lượng dài đến từ (ngày mới) .getTime(), nhưng đó là giới hạn của sự hiểu biết của tôi mà không cần nghiên cứu nhiều hơn nữa.

Tôi không biết điều này có liên quan đến vấn đề hiển thị của tôi hay không, nhưng trước đây tôi chưa bao giờ nhận thấy vấn đề này, trong IE8 hoặc bất kỳ trình duyệt nào khác. Ai đó có thể giải thích những thuộc tính này là gì?

+0

HTML của bạn có hợp lệ không? –

+0

Bạn có sử dụng tính năng 'data' của jQuery để gán dữ liệu cho các phần tử không? Tôi nghĩ rằng thêm các thuộc tính này vào các phần tử để theo dõi các nút duy nhất. Tuy nhiên, điều này không ảnh hưởng đến hiển thị theo bất kỳ cách nào. Bạn có thể đăng một URL không? – RoToRa

+0

Vâng, nó ổn. –

Trả lời

11

jQuery sử dụng các thuộc tính "expando" này để theo dõi dữ liệu được liên kết với các phần tử. jQuery sử dụng API dữ liệu của nó để xử lý sự kiện cộng với bất kỳ dữ liệu chung nào mà bạn có thể muốn ràng buộc với một phần tử (sử dụng $.data).

Thuộc tính (jQuery1279875396122) sẽ có giá trị được liên kết với một vị trí trong jQuery.cache.

Lý do jQuery không lưu dữ liệu trực tiếp vào phần tử (như thuộc tính thông thường) là để tránh rò rỉ bộ nhớ và chỉ để nói chung ít gây khó chịu hơn.


Cũng như một ví dụ, khi bạn gắn một event handler cho một yếu tố, như vậy:

jQuery('div').click(doSomething); 

Chức năng doSomething sẽ được lưu trong jQuery.cache và, về mặt kĩ thô sơ, vị trí của nó (hay đúng hơn, vị trí của đối tượng tham chiếu nó) sẽ được gán cho thuộc tính jQuery1279875396122 của phần tử. jQuery sẽ vẫn sử dụng API gốc của trình duyệt để liên kết với sự kiện của phần tử nhưng khi nó được kích hoạt, jQuery sẽ tra cứu (trong jQuery.cache) và gọi các trình xử lý chính xác.

CHỈNH SỬA: Chỉ cần rõ ràng, các thuộc tính này không phải là nguyên nhân gây lo ngại. Bạn sẽ thấy chúng trên tất cả các phần tử có bất kỳ dữ liệu nào bị ràng buộc thông qua jQuery (bao gồm cả trình xử lý sự kiện). Tôi sẽ rất ngạc nhiên nếu đây là nguyên nhân của vấn đề kết xuất của bạn.

+0

Thú vị. Nhưng tôi chưa bao giờ thấy các thuộc tính này trước đây, và tôi vẫn không thể nhìn thấy chúng trong Firefox/Firebug. Ngoài ra, mỗi nút có một, không chỉ những nút mà chúng tôi đã lưu trữ dữ liệu. –

+0

@Charles Anderson, Bạn có thể không cố tình lưu trữ dữ liệu trong các nút này. jQuery sử dụng API dữ liệu của nó cho các nhiệm vụ nội bộ. Ngoài ra, thuộc tính expando chỉ hiển thị dưới dạng thuộc tính trong IE (AFAIK). FF và các trình duyệt khác coi nó như là một thuộc tính DOM thông thường và do đó nó sẽ không xuất hiện trong HTML thực tế. – James

+0

Chỉ cần nghĩ rằng tôi muốn thêm phiếu bầu của tôi tự tin vào thực tế này sẽ làm cho không có sự khác biệt để vẽ ở tất cả. – Chris

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