【问题标题】:jQuery .data and .attr weird behaviour?jQuery .data 和 .attr 奇怪的行为?
【发布时间】:2015-02-02 00:42:15
【问题描述】:

谁能解释在下面的小提琴中发现的奇怪的 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 中,但我正在做相反的事情并得到更多意想不到的结果.

【问题讨论】:

    标签: jquery html


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我不希望它改变属性,我希望它获得我通过.attr()更新的属性的新值。
    • 看起来它成功获取了新的属性值——“失败”的调用是使用.data的调用。
    • 它没有也不应该,正如我已经解释的那样。我把它分成两部分来强调它。
    • @KevinB 是对的。如果你想更新数据,为什么不使用.data( key, value ) 格式呢?这将更新 jQuery 用于检索值的对象数据。
    • 现在说得通了,谢谢大家。我想它们并不是真的要结合在一起。由于一些服务器端的东西,我需要保持属性更新。无论如何,我会坚持设置和阅读.attr()。谢谢!
    猜你喜欢
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多