2010-12-03 11 views
5

我節省的div容器鍵值對尺寸:如何通過使用獲得jQuery對象

$('#div_id').data(key, value); 

在我需要檢查是否有任何存儲在這個div容器結束。

所以首先我通過調用獲取內容:

var data = $('#div_id').data(); 

然後用data.length或data.size檢查它的大小。

但是這兩個函數都不存在。據我所知jquery中的數據函數返回一個對象,所以我應該能夠得到這個對象的大小。

如何獲取由jquery中的數據函數返回的對象的大小?

+0

Dupe? http://stackoverflow.com/questions/2402193 – kafuchau 2010-12-03 14:21:34

+0

如果你想檢查一個特定的鍵是否在數據()中使用:if('key_name'in $('#div_id')。data()) – fredrik 2010-12-03 14:29:52

回答

10

對象沒有「大小」。你可以指望它的屬性,雖然:

function getPropertyCount(obj) { 
    var count = 0, 
     key; 

    for (key in obj) { 
     if (obj.hasOwnProperty(key)) { 
      count++; 
     } 
    } 

    return count; 
} 

用法:

alert(getPropertyCount(data)); 
0

JavaScript對象不具有length屬性。但是你可以很容易地用一個簡單的jQuery函數來計算它。

$.fn.dataLength = function() { 
    var i, 
     n = 0, 
     t = $(this); 
    for (i in t.data()) { 
     n += 1; 
    } 

    return n; 
} 

然後用$( '#div_id')使用DATALENGTH()

編輯

心靈有關。數據的數據結構,並在檢查其他的答案.hasOwnProperty

2

將這些鍵/值對存儲在對象/節點上的這個級別並不是最好的辦法。

var data = $('#div_id').data(); 

返回附加到這個node所有數據,這將包括event handlers爲實例的有沒有。

所以最好的解決方案是創建一個包含所有數據的對象:

$('#div_id').data('mydata', {}); 
/* ... */ 
$('#div_id').data('mydata')[key] = value; 

您的實際問題。純Javascript對象不擁有.length屬性。你必須檢查自己,循環的鑰匙:

var mylen = 0; 
for(var prop in $('#div_id').data('mydata')) { 
    mylen++; 
} 

這應該也檢查和調用.hasOwnProperty()方法,它可以確保當前屬性未在原型鏈從某處在繼承得到改善。

1

你知道你使用的是什麼「鑰匙」嗎?如果是這樣,只需檢查密鑰,如果沒有,​​。

例如

var myStuff = {}; 
myStuff.date = new Date(); 
myStuff.name = "Santa Claus"; 
myStuff.lifeStory = "Once upon a time..."; 
$('#div_id').data('myData', myStuff); 

然後,當你需要它退出時,只需抓住一個鍵......

var data = $('#div_id').data('myData'); 

請記住,是JavaScript的對象/「地圖」沒有「長」或「大小」方法/屬性,因此,如果您需要檢查它是否包含什麼東西,像這樣的通用功能應該管用。

function isObjEmpty(obj){ 
    for(var i in obj){ 
    return false; 
    } 
    return true; 
} 
相關問題