2

次のフォト アルバムの例を考えてみましょう。

アルバムの最初のページと最後のページは、アルバムの見開きの半分のサイズです。比較のためにattr('data-width')とを設定しましたattr('data-width_correct')

例 -- checkImageDimesions()

//Define if first or last page
if($(this).is(':first-child') || $(this).is(':last-child'))
{
    $(this).find('img').attr('data-height_correct' , maxHeight);
    $(this).find('img').attr('data-width_correct' , maxWidth / 2);  
} else{
    $(this).find('img').attr('data-height_correct' , maxHeight);
    $(this).find('img').attr('data-width_correct' , maxWidth);  
} 

これは期待どおりに機能し、正しい値でデータを更新します。次のステップはwidth > width_correct、サイズ変更のクラスを追加する場合です。

if($(this).find('img').data('width') > $(this).find('img').data('width_correct'))
{

     $(this).addClass('resize');
}

この関数の呼び出しは、jQuery .sortable() の成功時に発生します。最初のソートではこれは正しく機能しますが、その後のソートでは、サイズが正しくない最初のイメージが保持され、 .resizefalse を返す新しいイメージはwidth > width_correct割り当てられません。resize

ソート可能

$("#sortable").sortable(
{
success: function(){checkImageDimension()} 
}
4

2 に答える 2

1

オブジェクト データ (単純な文字列、数値、またはブール値ではないもの) を DOM ノードに添付すると、Internet Explorer でメモリ リークが発生することがよくあります。これは、DOM ノードが IE のネイティブ Javascript オブジェクトではないためです。そのため、DOM ノードに接続されているものをガベージ コレクションする方法を理解していません。

DOM ノードに単純なフラグまたは数値が必要な場合は、attr("x_mycount", 1) を使用するか、代わりに this.x_mycount を使用して DOM ノードにプロパティを設定します。(DOM 名前空間にいるため、属性またはプロパティ名の選択には注意してください。注意しないと、何かを破壊する可能性があります。) ただし、.data() を使用するのが最も安全です。

ソース: forum.jquery.com/topic/when-to-use-attr-vs-data

于 2013-01-15T20:28:43.200 に答える
0

データ属性を更新するには、データ関数に 2 番目のパラメーターを追加するだけです。

$('#elementID').data('width-correct', '400');

それだけです。更新されます。

于 2013-01-15T20:20:36.987 に答える