JQuery。数据()不工作?

最近我正在编码,我遇到了一个奇怪的问题。 我试图分配一个数据属性到我创build的一个新元素(通过jQuery),只发现它不会实际分配的属性。 有关示例,请参阅下面的链接,代码如下所示:

http://jsfiddle.net/y95p100c/1/

任何想法为什么发生这种情况? 我从来没有偶然发现过

var div = $("<div />") $(div).data("foo", "bar") console.log($(div)[0].outerHTML) // prints <div></div> 

data不会设置 data-*属性。 它pipe理一个与data-*属性无关的数据caching。 它从data-*属性初始化 ,如果有任何存在,但从不写入。 要写入属性,请使用attr

例如: 更新小提琴

 var div = $("<div />") $(div).attr("data-foo", "bar") console.log($(div)[0].outerHTML) 

你所看到的仅仅是这种令人惊讶的许多方法之一。 另一个是,如果你的标记是<div id="elm" data-foo="bar"></div>并且在某些时候使用$("#elm").data("foo")来获取值(它确实是"bar" ),那么你做$("#elm").data("foo", "update") ,属性仍然是data-foo="bar"但是现在由datapipe理的datafoo等于"update" 。 但是上面的规则解释了它: data不会写入 data-* attrs。

jQuery在元素加载时导入data-属性,但之后不会访问它。 元素存储在一个jQuery内部结构中。 从API :

data-属性在访问数据属性的第一次被拉取,然后不再被访问或变异(所有的数据值然后存储在jQuery中)。