如何更新数据 - * attrs?

时间:2012-08-18 03:59:57

标签: jquery

使用jQuery 1.7.2,如何更新数据模型时更新元素中的data-*个attrs?

例如:

$('el').attr('data-x', 400);
var data = $('el').data( );
data.x += 100;

更改$(el).data()似乎并未将更改推回到元素'data-* attrs。

为什么我要这个?我想使用内置的jQuery选择器和最新的数据。

3 个答案:

答案 0 :(得分:4)

你可以这样做:

$('el').attr('data-x', 400);

答案 1 :(得分:2)

除非您要直接使用属性值(例如在非jQuery插件中),否则没有理由将数据推送回元素的属性。这些更改只发生在客户端,因此简单地缓存从[data-*]属性中检索到的值会更加高效。

如果绝对必须更新属性值,则应使用.attr()方法。

此外,在检索数据时,重要的是要知道.data()方法会尝试确定您的内容是什么类型的数据类型:

<div data-foo="bar" data-baz="0" data-fizz='{"a":"b"}' data-bool="true"></div>

$('div').data('foo');       //returns "bar"
$('div').attr('data-foo');  //returns "bar"

$('div').data('baz');       //returns 0
$('div').attr('data-baz');  //returns "0"

$('div').data('fizz');      //returns {"a":"b"} as an object
$('div').attr('data-fizz'); //returns "{\"a\":\"b\"}"

$('div').data('bool');      //returns true
$('div').attr('data-bool'); //returns "true"

答案 2 :(得分:1)

要使用data-*属性,请使用attr(name,value)方法 - 与任何其他属性值相同:

设置它:

$('#myDiv').attr('data-name', 'bob');

获得它:

var name = $('#myDiv').attr('data-name');

data-* 属性$(..).data()函数之间的区别在于属性只能包含字符串值,而jQuery的{{ 1}}函数允许您附加(以及稍后检索)实际的javascript对象。

data()