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"
但是现在由data
pipe理的data
有foo
等于"update"
。 但是上面的规则解释了它: data
不会写入 data-*
attrs。
jQuery在元素加载时导入data-
属性,但之后不会访问它。 元素存储在一个jQuery内部结构中。 从API :
data-
属性在访问数据属性的第一次被拉取,然后不再被访问或变异(所有的数据值然后存储在jQuery中)。