9

我需要在数据属性的两个可能值之间切换。

如果data-state等于,enabled那么我想将其更改为disabled,反之亦然。

$('.sites .state').on('ajax:success', function(data, status, xhr) {
   var site = $(this).parents('article').first();

   if (site.data('state') == 'enabled') {
     site.attr('data-state', 'disabled');
   } else {
     site.attr('data-state', 'enabled');
   }
});

注意:我需要更改 DOM 元素,据我所知,我不能data这样做(因此使用attr)。

4

3 回答 3

8
site.attr('data-state', 'disabled');

应该

site.data('state', 'disabled');

创建元素时,该data-<value>属性可用于初始化数据属性,但之后您必须使用jQuery.data()方法来获取或修改数据。

$(el).data('<data-name>')返回值的同时,$(el).data('<data-name>', value)设置数据值。

更新:基于更新的要求

$('div').attr('data-state', $('div').attr('data-state') == 'enabled' ? 'disabled' : 'enabled')

小提琴

于 2013-01-23T14:51:54.083 回答
4

不太确定问题出在哪里,但既然您正在使用.data(),您不妨继续在 if/else 中使用它。Doing.attr('data-state')将其保存在 DOM 元素本身上(当您检查元素时可见),而.data('state')它是不可见的,而且速度更快。

此外,如果您使用三元运算符,您可以将其变成 1 小行:

site.attr('data-state', site.data('state') === 'enabled' 
    ? 'disabled' 
    : 'enabled');
于 2013-01-23T14:55:39.387 回答
3
site.data('state', (site.data('state') == 'enabled' ? 'disabled' : 'enabled'))
于 2013-01-23T14:56:10.583 回答