1

谁能解释在下面的小提琴中发现的奇怪的 jquery 行为?

http://jsfiddle.net/HSyS6/2/

我有以下html...

<div id="test" data-prevy="0"></div>

使用以下 jquery ...

console.log($('#test').data('prevy'));
console.log($('#test').attr('data-prevy'));

$('#test').attr('data-prevy', 2);

console.log($('#test').data('prevy'));
console.log($('#test').attr('data-prevy'));

$('#test').attr('data-prevy', 1);

console.log($('#test').data('prevy'));
console.log($('#test').attr('data-prevy'));

哪个输出...

0
0
0
2
0
1

当我期望它输出时......

0
0
2
2
1
1

我意识到,如果您通过 .data (IE: .data('prevy', 2);) 设置值,则该值不会反映在 DOM 中,但我正在做相反的事情并得到更多意想不到的结果。

4

1 回答 1

7

.data()不设置或更改元素的属性,它最初只是获取它的值,然后更新存储在 jQuery 中的元素的内部对象。

内部数据首次初始化后,它永远不会返回属性来获取或设置值,因此.data()如果您已经.data在该元素上使用过,更新属性不会更新存储的内容。

由于您只更新属性,内部存储的数据永远不会更新,只会更新属性。这是预期的行为。

供参考,https://github.com/jquery/jquery/blob/1.9-stable/src/data.js

于 2013-04-30T20:41:07.387 回答