2013-01-23 10 views
5

データ属性の2つの値の間を切り替える必要があります。jQueryでデータ属性を切り替えるには?

data-stateenabledの場合、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要素とto my knowledgeを変更するために必要な、私は(attrのしたがって使用)ことを行うためにdataを使用することはできません。要素が作成されると

+4

だから、問題は何ですか? – VisioN

+0

@VisioN更新情報をご覧ください。私はDOM要素を変更する必要があり、私の知る限り、私はそれを行うためにデータを使用することはできません(したがって、attrの使用)。 – Shpigford

答えて

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

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

data-<value>属性は、dataプロパティを初期化中に使用することができますする必要がありますが、そのあとは、データを取得または変更するjQuery.data()メソッドを使用する必要があります。

$(el).data('<data-name>')は値を返しますが、$(el).data('<data-name>', value)はデータ値を設定します。

更新:更新の要件

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

Fiddle

+0

私はDOM要素を変更する必要があり、私の知る限り、私はそれを行うために 'data'を使うことはできません(したがって' attr'の使用)。 – Shpigford

+0

@Shpigfordが答えを –

3

問題が何であるか本当にわからないに基づいていますが、.data()を使用しているので、あなたにもあなたの場合/他にそれを使用し続けるかもしれません。 .attr('data-state')を実行すると、DOM要素自体(要素を検査するときに表示されます)に保存されますが、.data('state')では表示されず、速度も速くなります。あなたは三項演算子を使用する場合

また、あなたは小1行にそれを行うことができます。

site.attr('data-state', site.data('state') === 'enabled' 
    ? 'disabled' 
    : 'enabled'); 
+0

私はDOM要素を変更する必要があり、私の知る限り、私はそれを行うためにデータを使用することはできません(したがってattrの使用)。 – Shpigford

+0

ああ、大丈夫、 'site.attr(' –

1
site.data('state', (site.data('state') == 'enabled' ? 'disabled' : 'enabled')) 
関連する問題