我无法通过jQuery更新数据值,我发现了类似的问题,但在这种情况下没有帮助。
我的数据名为color
,其值为red
,我只想将页面加载时的值更改为绿色。
<div class="test" data-color="red"></div>
if ( $('.test').data('color') === 'red' ) {
$(this).data('color', 'green');
}
答案 0 :(得分:3)
this
不引用.test
,如果要更改.test
元素的数据颜色值,则需要使用:
$(document).ready(function() {
if ( $('.test').data('color') === 'red' ) {
$('.test').data('color', 'green');
}
});
如果您希望在页面加载时附加它,请确保在访问数据属性值时存在目标元素
答案 1 :(得分:0)
无法判断你所展示的内容,但除非这是某种处理程序,否则你的$(this)并不是指你在if语句中检查时所选择的元素。试试这个:
var $test = $('.test');
if ($test.data('color') === 'red') {
$test.data('color', 'green');
}
这是一个jsfiddle来证明它有效。
答案 2 :(得分:-1)
if ( $('.test').attr("data-color") == 'red' ) {
$(this).attr({'data-color', 'green'});
}
答案 3 :(得分:-1)
你可以这样做:
$.each($('.test'), function() {
if ( $(this).data('color') === 'red' ) {
$(this).attr('data-color', 'green');
}
});
<强> Fiddle Demo 强>
答案 4 :(得分:-1)
如果您需要或想要使用该语法来获取,更新或创建这种属性,您可以像这样为jquery创建一个简单的插件:
(function ($) {
$.fn.data = function (prop, value) {
if(value) {
return $(this).attr('data-' + prop, value);
}else{
return $(this).attr('data-' + prop);//Or return $(this).data(prop);
}
};
})(jQuery);
答案 5 :(得分:-1)
您不能使用data("key", "value")
操作来更新dom属性。因为,此函数也用于操作像data-custom={"key":"value"}
这样的对象属性。当您使用data("color")
时,这将返回一个对象,并将保存为jquery $.cache
。当你更新它时,它实际上会更新缓存版本,而不是实际的dom属性。
您可以看到jquery doc;
The data- attributes are pulled in the first time the data property is accessed and then are no longer accessed or mutated (all data values are then stored internally in jQuery).
要更新dom属性,您可以使用attr()之类的;
if ( $('.test').data('color') === 'red' ) {
$('.test').attr('data-color', 'green');
}
这是一个工作小提琴:http://jsfiddle.net/cubuzoa/etb6k/
答案 6 :(得分:-2)