为什么我不能在Jquery dom节点构造中内联.data(),就像我可以.attr()一样?

时间:2014-03-09 17:12:38

标签: javascript jquery html

鉴于下面的代码,我希望foo和bar都有一个带有适当数据属性的div,但只有使用attr的那个有效。我错过了什么吗?这可能吗?有人可以解释/为什么/这会按照它的方式工作?我试着查看每种方法的api文档,但没有看到任何暗示它不应该工作的东西。

<div id="foo">asdd</div>
<div id="bar">asdasd</div>

$("#foo").append($('<div>').attr("data-something", "a value"));
$("#bar").append($('<div>').data("something", "a second value"));

http://jsfiddle.net/bUr7E/

http://api.jquery.com/data/#data1

https://api.jquery.com/attr/#attr2

3 个答案:

答案 0 :(得分:3)

jQuery不会在DOM上存储data,它使用内部地图

答案 1 :(得分:3)

可以这样做,但是你期望.data()发生的事情并不是这种方法的工作方式。 .data()方法将从<{1}}属性中读取值,但它不会创建或修改此类属性。

您链接的API文档:

  

数据属性在第一次访问数据属性时被拉出,然后不再被访问或变异(所有数据值都在内部存储在jQuery中)。

在您自己的小提琴中,您应该能够从调试控制台向您自己证明您创建的第二个data-foo确实存储了该数据。

答案 2 :(得分:0)

如果您对提供数据并将其与DOM元素配对感兴趣,您可能需要考虑使用D3:http://d3js.org