Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Вывести товары из массива JSON по табам (https://javascript.ru/forum/dom-window/79854-vyvesti-tovary-iz-massiva-json-po-tabam.html)

Debroneee 01.04.2020 22:08

Вывести товары из массива JSON по табам
 
Вложений: 1
Помогите с решением, пожалуйста.

Нужно из json массива вывести данные по табам в зависимости от категории и сделать общий таб где будут выводиться все товары. В каждом табе изначально должно отображаться к примеру по 4 позиции и по нажатию на кнопку loadmore должно подгружаться еще 4 нужной категории. Вот частичное решение https://codepen.io/Mr_Sergo/pen/NJaqXz

рони 03.04.2020 01:24

вывод товара по категориям
 
Debroneee,

<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .header{
      list-style: none;
      display: flex;
  }
  .header li{
      margin: 4px;
      padding: 4px;
  }

  .header li.active{
      background-color: #696969;
      color: #FFFFFF;
  }
  .content li{
      list-style: decimal-leading-zero;
  }
  .content li.up{
      list-style: none;
      border: 1px solid #000000;
      border-radius: 3px;
      display:  inline-block;
  }
  </style>

  <script>
var products = [
    {productId:1, productName: 'Товар 1', categoryId:1},
    {productId:2, productName: 'Товар 2', categoryId:2},
    {productId:3, productName: 'Товар 3', categoryId:3},
    {productId:4, productName: 'Товар 4', categoryId:4},
    {productId:5, productName: 'Товар 5', categoryId:5},
    {productId:6, productName: 'Товар 6', categoryId:1},
    {productId:7, productName: 'Товар 7', categoryId:2},
    {productId:8, productName: 'Товар 8', categoryId:3},
    {productId:9, productName: 'Товар 9', categoryId:4},
    {productId:10, productName: 'Товар 10', categoryId:5},
    {productId:11, productName: 'Товар 11', categoryId:1},
    {productId:12, productName: 'Товар 12', categoryId:2},
    {productId:13, productName: 'Товар 13', categoryId:3},
    {productId:14, productName: 'Товар 14', categoryId:4},
    {productId:15, productName: 'Товар 15', categoryId:5},
    {productId:16, productName: 'Товар 16', categoryId:1},
    {productId:17, productName: 'Товар 17', categoryId:2},
    {productId:18, productName: 'Товар 18', categoryId:3},
    {productId:19, productName: 'Товар 19', categoryId:4},
    {productId:20, productName: 'Товар 20', categoryId:5},
    {productId:21, productName: 'Товар 21', categoryId:1},
    {productId:22, productName: 'Товар 22', categoryId:2},
    {productId:23, productName: 'Товар 23', categoryId:3},
    {productId:24, productName: 'Товар 24', categoryId:4},
    {productId:25, productName: 'Товар 25', categoryId:5}
];

var categories = [
    {categoryId:1, categoryName: 'Футболки'},
    {categoryId:2, categoryName: 'Майки'},
    {categoryId:3, categoryName: 'Носки'},
    {categoryId:4, categoryName: 'Джинсы'},
    {categoryId:5, categoryName: 'Брюки'},
];

document.addEventListener("DOMContentLoaded", function() {
    const on = (parent, event, selector, handler) => parent.addEventListener(event, ({target}) => {
        if (target = target.closest(selector)) handler(target)
    })
    const data = {};
    const render = (id, up) => {
        let headerLi = `<li class="${id == 0 ? 'active' : ''}" data-id="0">All`;
        categories.forEach(({categoryId, categoryName}) => headerLi +=
        `<li class="${id == categoryId ? 'active' : ''}" data-id="${categoryId}">${categoryName}`);
        document.querySelector(".header").innerHTML = headerLi;
        if (!data[id]) data[id] = 4;
        if (up) data[id] += 4;
        let limit = data[id];
        let contentLi = [];
        for (const {productName, categoryId} of products)
        if (id == 0 || categoryId == id) contentLi.push(`<li>${productName}`);
        if (contentLi.length > limit) {
            contentLi.length = limit;
            contentLi.push(`<li class="up" data-id="${id}" >loadmore`);
        }
        document.querySelector(".content").innerHTML = contentLi.join('');
    }
    render(0);
    const ClickHandler = el => render(el.dataset.id, el.classList.contains("up"));
    on(document, "click", "[data-id]", ClickHandler);
});
  </script>
</head>
<body>
<ul class="header"></ul>
<ul class="content"></ul>
</body>
</html>


Часовой пояс GMT +3, время: 17:17.