Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何更新数据-*属性?_Jquery - Fatal编程技术网

Jquery 如何更新数据-*属性?

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); 没有理由将数据推回到元素的属性上,除非您

使用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);

没有理由将数据推回到元素的属性上,除非您要直接使用属性值(例如在非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[':']
创建一个自定义选择器,或者只使用该方法。没有理由将对元素数据的更改推回到其属性。