尝试整合分页在多个同位素实例上

如何解决尝试整合分页在多个同位素实例上

我一直在尝试使用名为Isotope.js的库来集成过滤器功能。分页功能包括在筛选器中。我一直在尝试解决有关如何使分页在多个isotope实例上工作的问题。分页似乎在使用过滤器时会多次自我复制,并且会影响使用分页时出现的其他实例

以下是我目前正在研究的示例工作

var itemSelector = ".products-item";
var $checkboxes = $('.filter-checkbox');
var $container = $('.products-container').isotope({
  itemSelector: itemSelector
});

//Ascending order
var responsiveIsotope = [
  [480,3],[720,5]
];
var itemsPerPageDefault = 5;
var itemsPerPage = defineItemsPerPage();
var currentNumberPages = 1;
var currentPage = 1;
var currentFilter = '*';
var filterAttribute = 'data-filter';
var filterValue = "";
var pageAttribute = 'data-page';
var pagerClass = 'isotope-pager';

// update items based on current filters    
function changeFilter(selector) {
  $container.isotope({
    filter: selector
  });
}

//grab all checked filters and goto page on fresh isotope output
function goToPage(n) {
  currentPage = n;
  var selector = itemSelector;
  var exclusives = [];
  // for each box checked,add its value and push to array
  $checkboxes.each(function(i,elem) {
    if (elem.checked) {
      selector += (currentFilter != '*') ? '.' + elem.value : '';
      exclusives.push(selector);
    }
  });
  // smash all values back together for 'and' filtering
  filterValue = exclusives.length ? exclusives.join('') : '*';

  // add page number to the string of filters
  var wordPage = currentPage.toString();
  filterValue += ('.' + wordPage);

  changeFilter(filterValue);
}

// determine page breaks based on window width and preset values
function defineItemsPerPage() {
  var pages = itemsPerPageDefault;

  for (var i = 0; i < responsiveIsotope.length; i++) {
    if ($(window).width() <= responsiveIsotope[i][0]) {
      pages = responsiveIsotope[i][1];
      break;
    }
  }
  return pages;
}

function setPagination() {

  var SettingsPagesOnItems = function() {
    var itemsLength = $container.children(itemSelector).length;
    var pages = Math.ceil(itemsLength / itemsPerPage);
    var item = 1;
    var page = 1;
    var selector = itemSelector;
    var exclusives = [];
    // for each box checked,add its value and push to array
    $checkboxes.each(function(i,elem) {
      if (elem.checked) {
        selector += (currentFilter != '*') ? '.' + elem.value : '';
        exclusives.push(selector);
      }
    });
    // smash all values back together for 'and' filtering
    filterValue = exclusives.length ? exclusives.join('') : '*';
    // find each child element with current filter values
    $container.children(filterValue).each(function() {
      // increment page if a new one is needed
      if (item > itemsPerPage) {
        page++;
        item = 1;
      }
      // add page number to element as a class
      wordPage = page.toString();

      var classes = $(this).attr('class').split(' ');
      var lastClass = classes[classes.length - 1];
      // last class shorter than 4 will be a page number,if so,grab and replace
      if (lastClass.length < 4) {
        $(this).removeClass();
        classes.pop();
        classes.push(wordPage);
        classes = classes.join(' ');
        $(this).addClass(classes);
      } else {
        // if there was no page number,add it
        $(this).addClass(wordPage);
      }
      item++;
    });
    currentNumberPages = page;
  }();

  // create page number navigation
  var CreatePagers = function() {

    var $isotopePager = ($('.' + pagerClass).length == 0) ? $('<div class="' + pagerClass + '"></div>') : $('.' + pagerClass);

    $isotopePager.html('');
    if (currentNumberPages > 1) {
      for (var i = 0; i < currentNumberPages; i++) {
        var $pager = $('<a href="javascript:void(0);" class="pager" ' + pageAttribute + '="' + (i + 1) + '"></a>');
        $pager.html(i + 1);

        $pager.click(function() {
          var page = $(this).eq(0).attr(pageAttribute);
          goToPage(page);
        });
        $pager.appendTo($isotopePager);
      }
    }
    $container.after($isotopePager);
  }();
}
// remove checks from all boxes and refilter
function clearAll() {
  $checkboxes.each(function(i,elem) {
    if (elem.checked) {
      elem.checked = null;
    }
  });
  currentFilter = '*';
  setPagination();
  goToPage(1);
}

setPagination();
goToPage(1);

//event handlers
$checkboxes.change(function() {
  var filter = $(this).attr(filterAttribute);
  currentFilter = filter;
  setPagination();
  goToPage(1);
});

$('#clear-filters').click(function() {
  clearAll()
});
/* http://meyerweb.com/eric/tools/css/reset/ 
       v2.0 | 20110126
       License: none (public domain)
    */

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  font: inherit;
  vertical-align: baseline;
}


/* HTML5 display-role reset for older browsers */

article,section {
  display: block;
}

body {
  line-height: 1;
}

ol,ul {
  list-style: none;
}

blockquote,q {
  quotes: none;
}

blockquote:before,blockquote:after,q:before,q:after {
  content: '';
  content: none;
}

table {
  border-collapse: collapse;
  border-spacing: 0;
}

.centered-component {
  width: 100%;
  max-width: 1300px;
  margin: 0 auto;
  display: flex;
  flex-wrap: wrap;
  padding: 100px 0;
}

.centered-component .filter-sidebar {
  width: 100%;
  max-width: 250px;
  margin-right: 24px;
}

.centered-component .content-block {
  flex: 1;
}

.filter-sidebar {
  display: flex;
  flex-direction: column;
}

.products-container {
  display: grid;
  grid-template-columns: repeat(3,1fr);
  grid-gap: 24px;
}

.isotope-container>h2 {
  margin-bottom: 48px;
}

.products-item {
  position: relative !important;
  top: initial !important;
  left: initial !important;
}

.products-container {
  height: initial !important;
}

.isotope-pager {
  margin-top: 42px;
}

.isotope-container+.isotope-container {
  margin-top: 64px;
}
<!doctype html>

<html>


<head>
  <title>Isotope</title>
  <link rel="stylesheet" href="style.css" />

</head>

<body>
  <div class="centered-component">
    <div class="filter-sidebar">
      <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="beige" />
                beige
            </label>
      <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="green" />
                green
            </label>
      <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="blue" />
                blue
            </label>
      <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="orange" />
                orange
            </label>
      <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="purple" />
                purple
            </label>
      <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="pink" />
                pink
            </label>
      <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="teal" />
                teal
            </label>
      <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="yellow" />
                yellow
            </label>
      <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="black" />
                black
            </label>


    </div>

    <div class="content-block">
      <div class="isotope-container">
        <h2 class="heading">Category 1</h2>

        <ul class="products-container">
          <li class="products-item beige">
            <h2>beige</h2>
          </li>
          <li class="products-item green">
            <h2>green</h2>
          </li>

          <li class="products-item blue">
            <h2>blue</h2>
          </li>
          <li class="products-item orange">
            <h2>orange</h2>
          </li>
          <li class="products-item purple">
            <h2>purple</h2>
          </li>
          <li class="products-item pink">
            <h2>pink</h2>
          </li>
          <li class="products-item teal">
            <h2>teal</h2>
          </li>

          <li class="products-item yellow">
            <h2>yellow</h2>
          </li>
          <li class="products-item black    ">
            <h2>black</h2>
          </li>
          <li class="products-item beige">
            <h2>beige</h2>
          </li>

        </ul>
      </div>
      <div class="isotope-container">
        <h2 class="heading">Category 1</h2>

        <ul class="products-container">
          <li class="products-item beige">
            <h2>beige</h2>
          </li>
          <li class="products-item green">
            <h2>green</h2>
          </li>

          <li class="products-item blue">
            <h2>blue</h2>
          </li>
          <li class="products-item orange">
            <h2>orange</h2>
          </li>
          <li class="products-item purple">
            <h2>purple</h2>
          </li>
          <li class="products-item pink">
            <h2>pink</h2>
          </li>
          <li class="products-item teal">
            <h2>teal</h2>
          </li>

          <li class="products-item yellow">
            <h2>yellow</h2>
          </li>
          <li class="products-item black    ">
            <h2>black</h2>
          </li>
          <li class="products-item beige">
            <h2>beige</h2>
          </li>

        </ul>
      </div>


    </div>

  </div>


  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.isotope/2.2.2/isotope.pkgd.min.js"></script>
  <script src="filter.js    "></script>


</body>

</html>

解决方法

它不起作用,因为您的代码不支持寻呼机的多个实例。我已对您的代码进行了一些修改,以允许多个寻呼机实例。

这是从头开始的,但这绝不是一个干净的解决方案,它需要在安静的几个地方进行清理,尽管如此,它仍可以使您了解为什么当前的代码无法正常工作。

var itemSelector = ".products-item";
var $checkboxes = $('.filter-checkbox');
var filterAttribute = 'data-filter';

class IsotopContainer {
  constructor(container) {
    this.container = $(container);
    //Ascending order
    this.responsiveIsotope = [
      [480,3],[720,5]
    ];
    this.itemsPerPageDefault = 5;
    this.itemsPerPage = this.defineItemsPerPage();
    this.currentNumberPages = 1;
    this.currentPage = 1;
    this.currentFilter = '*';
    this.filterValue = "";
    this.pageAttribute = 'data-page';
    this.pagerClass = 'isotope-pager';

    this.isotope = this.container.isotope({
      itemSelector: itemSelector
    });
  }


  // update items based on current filters    
  changeFilter(selector) {
    this.container.isotope({
      filter: selector
    });
  }

  //grab all checked filters and goto page on fresh isotope output
  goToPage(n) {
    this.currentPage = n;
    var selector = itemSelector;
    var exclusives = [];
    // for each box checked,add its value and push to array
    $checkboxes.each((i,elem) => {
      if (elem.checked) {
        selector += (this.currentFilter != '*') ? '.' + elem.value : '';
        exclusives.push(selector);
      }
    });
    // smash all values back together for 'and' filtering
    this.filterValue = exclusives.length ? exclusives.join('') : '*';

    // add page number to the string of filters
    var wordPage = this.currentPage.toString();
    this.filterValue += ('.' + wordPage);

    this.changeFilter(this.filterValue);
  }

  // determine page breaks based on window width and preset values
  defineItemsPerPage() {
    var pages = this.itemsPerPageDefault;

    for (var i = 0; i < this.responsiveIsotope.length; i++) {
      if ($(window).width() <= this.responsiveIsotope[i][0]) {
        pages = this.responsiveIsotope[i][1];
        break;
      }
    }
    return pages;
  }

  setPagination() {
    var SettingsPagesOnItems = () => {
      var itemsLength = this.container.children(itemSelector).length;
      var pages = Math.ceil(itemsLength / this.itemsPerPage);
      var item = 1;
      var page = 1;
      var selector = itemSelector;
      var exclusives = [];
      // for each box checked,add its value and push to array
      $checkboxes.each((i,elem) => {
        if (elem.checked) {
          selector += (this.currentFilter != '*') ? '.' + elem.value : '';
          exclusives.push(selector);
        }
      });

      // smash all values back together for 'and' filtering
      this.filterValue = exclusives.length ? exclusives.join('') : '*';
      // find each child element with current filter values
      this.container.children(this.filterValue).each((i,child) => {
        // increment page if a new one is needed
        if (item > this.itemsPerPage) {
          page++;
          item = 1;
        }
        // add page number to element as a class
        var $child = $(child);
        var wordPage = page.toString();
        var classes = $child.attr('class').split(' ');
        var lastClass = classes[classes.length - 1];
        // last class shorter than 4 will be a page number,if so,grab and replace
        if (lastClass.length < 4) {
          $child.removeClass();
          classes.pop();
          classes.push(wordPage);
          classes = classes.join(' ');
          $child.addClass(classes);
        } else {
          // if there was no page number,add it
          $child.addClass(wordPage);
        }
        item++;
      });
      this.currentNumberPages = page;
    };

    // create page number navigation
    var CreatePagers = () => {
      var existingPager = this.container.siblings('.' + this.pagerClass);
      var $isotopePager = (existingPager.length == 0) ? $('<div class="' + this.pagerClass + '"></div>') : existingPager;

      $isotopePager.html('');
      if (this.currentNumberPages > 1) {
        for (var i = 0; i < this.currentNumberPages; i++) {
          var $pager = $('<a href="javascript:void(0);" class="pager" ' + this.pageAttribute + '="' + (i + 1) + '"></a>');
          $pager.html(i + 1);

          $pager.click(e => {
            var page = $(e.target).attr(this.pageAttribute);
            this.goToPage(page);
          });
          $pager.appendTo($isotopePager);
        }
      }
      this.container.after($isotopePager);
    };

    SettingsPagesOnItems();
    CreatePagers();
  }

}

var containers = $.map($('.products-container'),c => new IsotopContainer(c));

// remove checks from all boxes and refilter
function clearAll() {
  $checkboxes.each(function(i,elem) {
    if (elem.checked) {
      elem.checked = null;
    }
  });
  containers.forEach(c => {
    c.currentFilter = '*';
    c.setPagination();
    c.goToPage(1);
  });
}

containers.forEach(c => {
  c.setPagination();
  c.goToPage(1);
});


//event handlers
$checkboxes.change(function() {
  var filter = $(this).attr(filterAttribute);

  containers.forEach(c => {
    c.currentFilter = filter;
    c.setPagination();
    c.goToPage(1);
  });
});

$('#clear-filters').click(function() {
  clearAll()
});
/* http://meyerweb.com/eric/tools/css/reset/ 
       v2.0 | 20110126
       License: none (public domain)
    */

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  font: inherit;
  vertical-align: baseline;
}


/* HTML5 display-role reset for older browsers */

article,section {
  display: block;
}

body {
  line-height: 1;
}

ol,ul {
  list-style: none;
}

blockquote,q {
  quotes: none;
}

blockquote:before,blockquote:after,q:before,q:after {
  content: '';
  content: none;
}

table {
  border-collapse: collapse;
  border-spacing: 0;
}

.centered-component {
  width: 100%;
  max-width: 1300px;
  margin: 0 auto;
  display: flex;
  flex-wrap: wrap;
  padding: 100px 0;
}

.centered-component .filter-sidebar {
  width: 100%;
  max-width: 250px;
  margin-right: 24px;
}

.centered-component .content-block {
  flex: 1;
}

.filter-sidebar {
  display: flex;
  flex-direction: column;
}

.products-container {
  display: grid;
  grid-template-columns: repeat(3,1fr);
  grid-gap: 24px;
}

.isotope-container>h2 {
  margin-bottom: 48px;
}

.products-item {
  position: relative !important;
  top: initial !important;
  left: initial !important;
}

.products-container {
  height: initial !important;
}

.isotope-pager {
  margin-top: 42px;
}

.isotope-container+.isotope-container {
  margin-top: 64px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.isotope/2.2.2/isotope.pkgd.min.js"></script>

<div class="centered-component">
  <div class="filter-sidebar">
    <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="beige" />
                beige
            </label>
    <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="green" />
                green
            </label>
    <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="blue" />
                blue
            </label>
    <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="orange" />
                orange
            </label>
    <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="purple" />
                purple
            </label>
    <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="pink" />
                pink
            </label>
    <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="teal" />
                teal
            </label>
    <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="yellow" />
                yellow
            </label>
    <label class="filter-item">
                <input type="checkbox"  class="filter-checkbox" value="black" />
                black
            </label>


  </div>

  <div class="content-block">
    <div class="isotope-container">
      <h2 class="heading">Category 1</h2>

      <ul class="products-container">
        <li class="products-item beige">
          <h2>beige</h2>
        </li>
        <li class="products-item green">
          <h2>green</h2>
        </li>

        <li class="products-item blue">
          <h2>blue</h2>
        </li>
        <li class="products-item orange">
          <h2>orange</h2>
        </li>
        <li class="products-item purple">
          <h2>purple</h2>
        </li>
        <li class="products-item pink">
          <h2>pink</h2>
        </li>
        <li class="products-item teal">
          <h2>teal</h2>
        </li>

        <li class="products-item yellow">
          <h2>yellow</h2>
        </li>
        <li class="products-item black    ">
          <h2>black</h2>
        </li>
        <li class="products-item beige">
          <h2>beige</h2>
        </li>

      </ul>
    </div>
    <div class="isotope-container">
      <h2 class="heading">Category 1</h2>

      <ul class="products-container">
        <li class="products-item beige">
          <h2>beige</h2>
        </li>
        <li class="products-item green">
          <h2>green</h2>
        </li>

        <li class="products-item blue">
          <h2>blue</h2>
        </li>
        <li class="products-item orange">
          <h2>orange</h2>
        </li>
        <li class="products-item purple">
          <h2>purple</h2>
        </li>
        <li class="products-item pink">
          <h2>pink</h2>
        </li>
        <li class="products-item teal">
          <h2>teal</h2>
        </li>

        <li class="products-item yellow">
          <h2>yellow</h2>
        </li>
        <li class="products-item black    ">
          <h2>black</h2>
        </li>
        <li class="products-item beige">
          <h2>beige</h2>
        </li>
      </ul>
    </div>
  </div>
</div>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res