jQuery Masonry和Ajax附加项目?

And*_*ndy 29 ajax jquery jquery-masonry

我试图使用一些ajax和jQuery Masonry插件来添加一些项目 - 但由于某种原因,新项目没有得到砌体应用?

我正在使用

jQuery.ajax({
    type: "POST",
    url: ajax_url,
    data: ajax_data,
    cache: false,
    success: function (html) {
        if (html.length > 0) {
            jQuery("#content").append(html).masonry( 'appended', html, true );
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

然而,随后附加的项目没有class="masonry-brick"应用,这意味着它们完全填满了定位?

rya*_*hue 41

看来该masonry函数需要一个jQuery对象作为其第二个参数而不是原始HTML字符串.你应该能够通过包装成功回调参数来解决这个问题:

jQuery.ajax({
    type: "POST",
    url: ajax_url,
    data: ajax_data,
    cache: false,
    success: function (html) {
        if (html.length > 0) {
            var el = jQuery(html);
            jQuery("#content").append(el).masonry( 'appended', el, true );
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!这解决了我的问题,应该是公认的答案. (2认同)

小智 26

var mediaItemContainer = $( '#container' );
mediaItemContainer.masonry( {
    columnWidth:  '210px',
    itemSelector: '.item'
} );
$( mediaItemContainer ).prepend( '<div class="item">foo</div>' );
$( mediaItemContainer ).masonry( 'reloadItems' );
$( mediaItemContainer ).masonry( 'layout' );
Run Code Online (Sandbox Code Playgroud)


小智 23

有类似的问题,而是使用以下行(转换为您的代码).对不起,我不记得我发现它的位置.

在您的代码中替换为:

jQuery("#content").append(el).masonry( 'appended', el, true );
Run Code Online (Sandbox Code Playgroud)

有了这个:

jQuery("#content").append(el).masonry( 'reload' );
Run Code Online (Sandbox Code Playgroud)

http://masonry.desandro.com/methods.html

  • -1`reload` masonary不是一个真正的解决方案,而只是一个解决方法.这可能会产生巨大的性能开销.想象一下,尝试将另外一个图像添加到超过200个图像的masonary网格并重新加载整个网格. (13认同)
  • 也适合我,看起来你不能重新申请砌体,你必须调用重装.我用过这个:`if(!$('#results').hasClass('masonry')){$('#results').masonry({itemSelector:'.product'}); } else {$('#results').masonry('reload'); }` (2认同)

kdg*_*ang 5

success: function (response) {
  if(response.length > 0) {
     var el = js(response); 
     setTimeout(function () {
       js("#masonry").append(el).masonry( 'appended', el).masonry('layout');
     }, 500);
  }
}   
Run Code Online (Sandbox Code Playgroud)

对我来说很好。