2012-04-27 56 views
8

Tôi muốn kiểm tra xem liệu giá trị dữ liệu jQuery đã được áp dụng cho một đối tượng hay chưa. Ví dụ: mã ở nơi khác có thể chỉ định dữ liệu cho một đối tượng:Cách thích hợp để kiểm tra giá trị .data() cụ thể trong một đối tượng jQuery?

$myObject.data('hello','world'); 

Ở những nơi khác, tôi muốn kiểm tra xem giá trị có được chào cho thuộc tính dữ liệu không.

Cách thích hợp để xử lý việc này là gì? .hasData có vẻ giống như sự lựa chọn hiển nhiên nhưng dường như không hoạt động như 'hasClass' làm trong đó bạn dường như không thể truyền tên phần tử dữ liệu cụ thể cho nó.

Trả lời

15

Để có được tài sản (ví dụ để so sánh), sử dụng .data với một đối số:

$myObject.data('hello') 

Nó trả về giá trị undefined khi dữ liệu không tồn tại.

+2

vì vậy, bạn sẽ sử dụng một cái gì đó như 'if (typeof $ myObject.data ('hello') ===" undefined "))'? Điều đó sẽ hoạt động, nhưng có vẻ như 'un-jQuery-ish';) –

+0

@DA. Không có phương pháp "jQuery-ish" cho yêu cầu của bạn. Bạn có thể viết một plugin, nếu bạn muốn. Tất cả những gì bạn cần là thông tin này: 1. Sau khi gán một giá trị sử dụng '.data()', phần tử DOM ** sẽ nhận được một thuộc tính có tên bằng '$ .expando'. 2. Thuộc tính này, ví dụ: "jQuery1710979685063056744", giữ một số nhận dạng. 3. Mã định danh này, ví dụ: "29" tương ứng với khóa trong '$ .cache', ví dụ: '$ .cache [29]'. Dữ liệu được lưu trữ trong '$ .cache [29] .data'. –

8

Kiểm tra xem dữ liệu có tồn tại chưa và đặt dữ liệu nếu không.

if ($myObject.data('hello') === undefined) { 
    // data NOT set 
    $myObject.data('hello','world'); 
} else { 
    // data IS set 
} 
+1

bạn dường như có dấu ngoặc ở những nơi sai? –

-1

Bạn cũng có thể thử:

$myObject.hasData("hello") 

Nó sẽ trở thành sự thật nếu có dữ liệu, và false nếu không có bất cứ điều gì. Liên kết trên trang web jQuery: http://api.jquery.com/jquery.hasdata/

+0

Đây là cách chính xác nhất để thực hiện việc kiểm tra này trên trang web jQuery. "Lợi thế chính của jQuery.hasData (phần tử) là nó không tạo và kết hợp một đối tượng dữ liệu với phần tử nếu không có phần tử nào đang tồn tại. Ngược lại, jQuery.data (phần tử) luôn trả về một đối tượng dữ liệu cho người gọi, tạo một đối tượng nếu không có đối tượng dữ liệu nào tồn tại trước đó. " –

+6

@ JamesWilson, hoàn toàn không chính xác. Điều này chỉ kiểm tra xem có dữ liệu ở tất cả, và nó không phải là một tài sản của một đối tượng jQuery, mà đúng hơn là chính jQuery. – Dykam

+1

Không hoạt động. Tôi nhận được TypeError: $ (...). HasData không phải là một hàm. – sohtimsso1970

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