2012-06-12 36 views
42

Tôi có đoạn mã sau:dữ liệu jQuery() trả về undefined, attr() trả về số nguyên

alert($embellishment.data("embellishmentId")); 
alert($embellishment.attr("data-embellishmentId")); 

Cảnh báo đầu tiên trả undefined, trong khi cảnh báo thứ hai trả về một số nguyên, 3.

-- SEE DEMO --

Tôi đang sử dụng jQuery phiên bản 1.7.2 (data đã được bổ sung với phiên bản 1.4 Tôi tin)

Tại sao điều này? Tôi có nên sử dụng data() nếu không trả về đúng giá trị không?

Trả lời

91

OK. Tôi đã tìm thấy sự cố bằng cách diễn giải jQuery docs.

Khi bạn viết:

$embellishment.data("embellishmentId"); 

nó được xử lý bởi jQuery như hợp chất thuộc tính:

<div data-embellishment-id="3"></div> 

Vì vậy, để giải quyết vấn đề bạn có thể sử dụng chữ thường trong khóa dữ liệu nếu không nó chỉ là địa chỉ thuộc tính khác.

<!-- HTML --> 
<div data-embellishmentid="3"></div> 

// JavaScript 
$embellishment.data("embellishmentid"); 
+5

Đây là mã nguồn nào đó: 'var name = "đĩa dữ liệu" + key.replace (rmultiDash, "- $ 1") .toLowerCase();' trong chức năng nội bộ 'dataAttr'. Trong đó 'rmultidash' là' rmultiDash =/([AZ])/g; ' – Esailija

+0

http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#embedding-custom-non -nguồn-dữ liệu-với-dữ liệu - * - thuộc tính – Alex

+0

Các bạn, jQuery đã làm điều đó trong một thời gian dài. Hãy xem các thuộc tính CSS. Nếu bạn muốn xem kiểu CSS, nó sử dụng camelCase cho các thuộc tính chưa được trích dẫn. Ví dụ: '$ ('# elem'). Css ({paddingTop: '40px'});' và '$ ('# elem'). Css ({'padding-top': '40px'});' . – TerranRich

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