去除附加的同位素项目

时间:2017-01-13 11:18:30

标签: ajax isotope

我在Wordpress中通过Ajax附加同位素项目:

我的JS代码:

var $news_container = $('#news'); //The ID for the list with all the blog posts
$news_container.isotope({ //Isotope options, 'item' matches the class in the PHP
    itemSelector: '.newsItem',
    masonry: {
      columnWidth: '.news-item-sizer',
      gutter: '.gutter-sizer'
    }
});
var has_run = false;
var init_offset = 0;

$('button.showall').click(function(e) {
    e.preventDefault();
    var button = $(this);

    // Disable button
    $(button).removeClass('showall');
    $(button).addClass('showless');

    // Record Nonce
    var nonce = $(this).data("nonce");

    if(has_run == false) {
        button.data('offset', $(this).data("offset"));
        init_offset = $(this).data("offset");
    }

    // Set AJAX parameters
    data = {
        action: 'mft_load_more_ajax',
        init_offset: init_offset,
        offset: button.data('offset'),
        nonce: nonce
    };

    $.post(mft_load_more_ajax.ajaxurl, data, function(response) {

        // Set Container Name
        var response = JSON.parse(response);
        console.log(response);

        // Run through JSON
        $.each( response, function( key, value ) {
          // Set Value
          var val = $(value);

          // Set Container
          var $container = $('#news').isotope();

          // Append Val
          $container.append(val).isotope( 'appended', val );

          $(button).html('show less');

        });

        // Set Offset
        var offset = button.data("offset");
        button.data("offset", offset + 11 );

        // If Has Run
        has_run = true;

        return false;
}

到目前为止,这很好用。现在我想将buttontext和它的类切换为.showless,在下一次单击时,应删除所有先前附加的项。它们都有类.newsItem.appendedItem。

我试过这个方法:

$('button.showless').click(function(e) {
    var button = $(this);
    console.log('showless');
    $out = $('.newsItem.appendedItem');
    var isotopeInstance = $('#news').data('isotope');
    isotopeInstance.$allAtoms = isotopeInstance.$allAtoms.not($out);
    $out.remove();

    // Disable button
    $(button).removeClass('showless');
    $(button).addClass('showall');

    has_run = false;

    return false;
});

不幸的是,这不起作用,因为甚至没有输入无显示功能,因为我没有在控制台中获取日志。我在俯瞰什么?

感谢您的帮助! 卡拉

更新1:

我在Google控制台中收到此错误。 enter image description here

1 个答案:

答案 0 :(得分:0)

不确定,现在的问题是什么。但是我使用if语句稍微清理了一下代码,以检查元素是否已经附加了。

所以我的最终代码现在看起来像这样:

var $news_container = $('#news'); //The ID for the list with all the blog posts
$news_container.isotope({ //Isotope options, 'item' matches the class in the PHP
    itemSelector: '.newsItem',
    masonry: {
      columnWidth: '.news-item-sizer',
      gutter: '.gutter-sizer'
    }
});
var is_appended = false;

$('button.showall').click(function(e) {
    e.preventDefault();
    var button = $(this);

    // Record Nonce
    var nonce = $(this).data("nonce");

    if(is_appended == false) {
        button.data('offset', $(this).data("offset"));

        // Disable button
        button.prop( "disabled" , true );

        // Set AJAX parameters
        data = {
            action: 'mft_load_more_ajax',
            offset: button.data('offset'),
            nonce: nonce
        };

        $.post(mft_load_more_ajax.ajaxurl, data, function(response) {
            // Set Container Name
            var response = JSON.parse(response);
            console.log(response);

            // Run through JSON
            $.each( response, function( key, value ) {
              // Set Value
              var val = $(value);

              // Set Container
              var $container = $('#news').isotope();

              // Append Val
              $container.append(val).isotope( 'appended', val );

            });

            // Undo Button Disable
            button.prop( "disabled" , false );
            button.html('Weniger News anzeigen');

            // Set Offset
            // var offset = button.data("offset");
            // button.data("offset", offset + 11 );

            // If Was appended
            is_appended = true;

            return false;

        });

    } else if(is_appended == true) {

        $out = $('.newsItem.appendedItem');            
        $news_container.isotope( 'remove', $out )
        // layout remaining item elements
        .isotope('layout');
        button.html('Alle News anzeigen');

        is_appended = false;
        return false;
    }

});

在Chrome中,一切都很完美。但只是想通了,在Firefox中,我的Ajax数组完全是空的,我无法获取任何数据。可能是另一个问题,我将单独发布。