2012-09-03 73 views
2

Possible Duplicate:
Get list of data-* attributes using javascript/jQuery的jQuery遍歷HTML5數據屬性

我有一系列的對象,所有的類似於這樣的:

<a data-type="file" data-path="/some/path" data-size="849858">Link</a> 

我想創建一個函數來拉動每一個數據的動態屬性,所以如果我添加類似「數據圖標」或其他任何數量的屬性的功能仍返回所有數據的數組屬性,如:

{ 
    "type" : "file", 
    "path" : "/some/path", 
    ... 
} 
+7

'$。每個($( 「#elementID」)數據(),函數(K,V){的console.log(K + ':' + V);}。 );' – adeneo

+0

謝謝,當我搜索時沒有找到重複。 – Fluidbyte

回答

7

編輯最初建議的答案是,如果你想要的JSON字符串/對象,我推斷你在問題中的輸出字符串。如果您只想獲取鍵/值對,則可以簡單地迭代數據屬性收集。

Live Demo

$.each($('a').data(), function(i, v) { 
    alert('"' + i + '":"' + v + '",'); 
}); 

最初建議的假設的答案,你想JSON字符串/對象

您可以鍵值對對象(JSON對象)數據的屬性,通過數據進行迭代屬性收集使用data()這將收集數據屬性。在創建json字符串之後,我們可以使用$ .parseJSON創建jSON對象,並使用循環從中獲取鍵/值對。

Live Demo

strJson = "{" 
$.each($('a').data(), function(i, v) { 
    strJson += '"' + i + '":"' + v + '",'; 
}); 
strJson = strJson.substring(0, strJson.length - 1); 
strJson += '}'; 
var jsonObject = $.parseJSON(strJson); 
for (var key in jsonObject) 
    alert(key + " : " + jsonObject[key]); 
+0

這是一個很糟糕的答案。你已經有了對象:'$(「a」)。data()'。但是你克隆了那個本身沒有意義的對象,但是你通過通過字符串連接創建JSON來實現它!克隆一個對象的很多更好的方法!然後,您將JSON解析回一個對象(您已經擁有),然後遍歷該對象(您已經完成)。 – gilly3

+0

非常感謝gilly,我從輸出中推斷出他想要JSON字符串/對象,我完全同意它不應該轉換爲JSON的密鑰對,現在我認爲他不需要JSON。 – Adil

+0

與json我得到這個錯誤「未捕獲SyntaxError:意外的令牌}在位置0的JSON」 – Gino