2

考虑以下相册示例。

专辑的第一页和最后一页是专辑展开的一半大小。我设置attr('data-width')andattr('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() 成功的情况下。在第一次排序时,这可以正常工作,但是在随后的排序中,大小不正确的初始图像会保留原始图像,并且不会分配.resize任何会返回 false 的新图像width > width_correctresize

可排序

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

2 回答 2

1

将对象数据(不是简单的字符串、数字或布尔值)附加到 DOM 节点通常会导致 Internet Explorer 中的内存泄漏。那是因为 DOM 节点不是 IE 中的原生 Javascript 对象,所以它不知道如何垃圾收集附加到它们的东西。

如果您只需要 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

要更新数据属性,您只需向数据函数添加第二个参数。

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

就是这样,它会更新。

于 2013-01-15T20:20:36.987 回答