Jquery 如何更新数据-*属性?
使用jQuery 1.7.2,在更新数据模型时,如何更新元素中的Jquery 如何更新数据-*属性?,jquery,Jquery,使用jQuery 1.7.2,在更新数据模型时,如何更新元素中的data-*attrs 例如: $('el').attr('data-x', 400); var data = $('el').data( ); data.x += 100; 更改$(el).data()似乎不会将更改推回到元素的data-*attrs 我为什么要这个?我想使用内置的jQuery选择器来获取最新数据。您可以这样做: $('el').attr('data-x', 400); 没有理由将数据推回到元素的属性上,除非您
data-*
attrs
例如:
$('el').attr('data-x', 400);
var data = $('el').data( );
data.x += 100;
更改$(el).data()
似乎不会将更改推回到元素的data-*
attrs
我为什么要这个?我想使用内置的jQuery选择器来获取最新数据。您可以这样做:
$('el').attr('data-x', 400);
没有理由将数据推回到元素的属性上,除非您要直接使用属性值(例如在非jQuery插件中)。这些更改只发生在客户端,因此只需缓存从
[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"
$('div')。数据('foo')//返回“bar”
$('div').attr('data-foo')//返回“bar”
$('div')。数据('baz')//返回0
$('div').attr('data-baz')//返回“0”
$('div')。数据('fizz')//将{“a”:“b”}作为对象返回
$('div').attr('data-fizz')//返回“{\“a\”:\“b\”}”
$('div')。数据('bool')//返回true
$('div').attr('data-bool')//返回“true”
要使用数据-*
属性,请使用attr(名称、值)
方法--与任何其他属性值相同:
要设置它,请执行以下操作:
$('#myDiv').attr('data-name', 'bob');
要获得它:
var name = $('#myDiv').attr('data-name');
data-*
属性和$(..).data()
函数之间的区别在于,属性只能包含字符串值,而jQuery的data()
函数允许您附加(以及稍后检索)实际的javascript对象
var obj = {
name: bob, age: 27,
foo: function() { ... }
};
$('#myDiv').data('some.identifier', obj);
// then later
var obj2 = $('#myDiv').data('some.identifier');
console.log(obj2 === obj); // true!
我想,使用
.data
应该行得通。。jQuery的哪个版本?@ExplosionPills.data不更新实际属性,它只是在jQuery对象中更改它的数据。@adammerifield@ExplosionPills是的,它是从html5数据中提取的,但是当你用更新它时。data
实际的属性标签不会更新。好的,是的。如何将对数据对象所做的更改推送回attr?(我将更新这个问题)哦..然后只做$('el').attr('data-x',data.x)。第二个参数可以是变量,因此您可以随意更改它。根据data.x的复杂性,我可能会首先对其进行JSON编码。您是否在元素中定义了data-*
?例如$('el').attr('data-x','1,2,3]')$('el').data.x.push(4)$('el').attr('data-x',JSON.stringify($('el').data.x,null,2));我想将对象作为字符串推回到attr,这样我就可以使用选择器(因为没有数据选择器)@jedirikb,您应该使用$.expr[':']
创建一个自定义选择器,或者只使用该方法。没有理由将对元素数据的更改推回到其属性。