2013-10-22 13 views
8

データ属性を変更しようとしていますが、変更されることはなく、デフォルトの「TEXT」のままです。データ属性が変更されていません

function SuccessGetActorsForGroupCallback(data, el) { 
    var str = ""; 
    jQuery.each(data, function (i, val) { 
     str += val + '<br />'; 
    }); 

    $(el).data('original-title', str); 
    Utilities.ApplyTooltips($(el)); 
} 

+2

['.data'](http://api.jquery.com/data)メソッドは' data-'HTML属性を変更しません。 jQueryが内部的に格納する変数を変更します。 – Blazemonger

+0

この質問に答えるのに十分な情報がありません。 Utilities.ApplyTooltipsは何をしますか?マークアップはどのように見えますか? – Joe

+0

もう少し文脈が役立つだろう。 'data'はどのように見え、' ApplyTooltips'は何をしますか? –

答えて

32

.data方法はdata- HTML属性を変更しません。 jQueryが内部的に格納する変数を変更します。

あなたが本当に.attr()方法とその明示的に行う、data-属性を変更したい/必要がある場合:

$(el).attr('data-original-title', str); 

しかし、これは.dataによって返された値を変更しません。 jQueryはdata- HTML属性からその値を取り出します。内部で格納されている値を見つけることができない場合のみです。 HTML属性を変更した後に$(el).data('original-title')を再度取得すると、変更されていないことがわかります。

このが問題の場合は、.removeData()メソッドを使用して、内部で保存された値を削除します。次に.data()を使用すると、jQueryはそれが見つからないことを確認し、data- HTML属性を取得します。 http://jsfiddle.net/mblase75/LHCUK/


HTML::

<p id="p" data-title="blah"></p> 

のjQuery:

console.log($('#p').data('title')); // returns "blah" 

// alter the attribute directly 
$('#p').attr('data-title','whooo'); // data-title="whooo" 
// test if .data is changed 
console.log($('#p').data('title')); // still returns "blah" 

// delete the .data() value 
$('#p').removeData('title'); 
// now fetch it again -- it will retrieve the new data- attribute 
console.log($('#p').data('title')); // returns "whooo" 

さて、実際には、あなたが心配する必要はありません

を見てみましょうこの。 data-属性は、の最初のの値が.data()であり、その変数の値がの現在のであるとは限りません。要約すると

.data()方法は、HTML要素から値を取得し、ドキュメントがロードされ、かつ変数が内部に保存されている限り、再びそうではないだろう一度

+3

これは私のコンピュータを壊すことから私を救った... – skirato

2

あなたのコードを助けてください:$(el).data('original-title', str);
は次のようになります。$(el).attr('data-original-title', str);

.attr();をキーに使用した場合の属性を変更するために使用される - 値のペア。

Documentation here

+3

「data-original-title」にする必要があるかもしれない – Joe

+0

私は基本的にそこに置いて、彼が指定したものは、私はポイントが十分に明らかだったと思う。しかし、私は私の答えを編集しました、チップのおかげで! – SidOfc

関連する問題