任何人都可以解释在下面的小提琴中发现的奇怪的jquery行为吗?
我有以下的HTML ...
<div id="test" data-prevy="0"></div>
Run Code Online (Sandbox Code Playgroud)
使用以下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'));
Run Code Online (Sandbox Code Playgroud)
哪个输出......
0
0
0
2
0
1
Run Code Online (Sandbox Code Playgroud)
当我希望它输出时......
0
0
2
2
1
1
Run Code Online (Sandbox Code Playgroud)
我意识到,如果你通过.data设置值(IE:.data('prevy',2);),这个值将不会反映在DOM中,但我正在做相反的事情并获得更多意想不到的结果.
.data()不设置或更改元素的属性,它只是初始获取它的值,然后更新存储在jQuery中的元素的内部对象.
首次初始化内部数据后,它永远不会返回到属性来获取或设置值,因此.data()如果您已经.data在该元素上使用过,则更新属性将不会更新存储的内容.
由于您只更新属性,因此内部存储的数据永远不会更新,只会更新属性.这是预期的行为.
供参考,https://github.com/jquery/jquery/blob/1.9-stable/src/data.js