2012-09-03 64 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