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 に答える