综合案例:商品价格筛选

 利用forEach和filter渲染商品并做价格筛选。

案例中用到方法: 
  1. forEach用于遍历数组中的每个元素。
  2. filter通过条件筛选返回一个新数组。
  3. switch完成条件判断。

案例分析:
  1. 通过forEach遍历初始化数据,将所有商品渲染到页面上。
  2. 给按钮注册点击事件。
  3. switch根据按钮索引判断要筛选的价格区间。
  4. filter完成价格筛选。
  5. 最后实现的效果,如下图:

代码如下: 
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>利用forEach和filter渲染商品并做价格筛选</title>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    .list {
      width: 990px;
      margin: 0 auto;
      display: flex;
      flex-wrap: wrap;
    }

    .item {
      width: 240px;
      margin-left: 10px;
      padding: 20px 30px;
      transition: all .5s;
      margin-bottom: 20px;
    }

    .item:nth-child(4n) {
      margin-left: 0;
    }

    .item:hover {
      box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.2);
      transform: translate3d(0, -4px, 0);
      cursor: pointer;
    }

    .item img {
      width: 100%;
    }

    .item .name {
      font-size: 18px;
      margin-bottom: 10px;
      color: #666;
    }

    .item .price {
      font-size: 22px;
      color: firebrick;
    }

    .item .price::before {
      content: "¥";
      font-size: 14px;
    }

    .goodsPrice {
      display: flex;
      width: 990px;
      margin: 0 auto;
      padding: 50px 30px;
    }

    .goodsPrice a {
      padding: 10px 20px;
      background: #f5f5f5;
      color: #666;
      text-decoration: none;
      margin-right: 20px;
    }

    .goodsPrice a:active,
    .goodsPrice a:focus {
      background: #05943c;
      color: #fff;
    }
  </style>
</head>

<body>
  <div class="goodsPrice" id="goodsPrice">
    <a data-index="1" href="javascript:;">0-100元</a>
    <a data-index="2" href="javascript:;">100-300元</a>
    <a data-index="3" href="javascript:;">300元以上</a>
    <a href="javascript:;">全部区间</a>
  </div>
  <div class="list" id="list">
    <!-- <div class="item">
      <img src="https://yanxuan-item.nosdn.127.net/84a59ff9c58a77032564e61f716846d6.jpg" alt="">
      <p class="name">称心如意手摇咖啡磨豆机咖啡豆研磨机</p>
      <p class="price">100</p>
    </div> -->
  </div>
  <script>
    // 初始化数据
    const goodsList = [
      {
        id: '4001172',
        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',
        price: '289.00',
        picture: 'https://yanxuan-item.nosdn.127.net/84a59ff9c58a77032564e61f716846d6.jpg',
      },
      {
        id: '4001594',
        name: '日式黑陶功夫茶组双侧把茶具礼盒装',
        price: '288.00',
        picture: 'https://yanxuan-item.nosdn.127.net/3346b7b92f9563c7a7e24c7ead883f18.jpg',
      },
      {
        id: '4001009',
        name: '竹制干泡茶盘正方形沥水茶台品茶盘',
        price: '109.00',
        picture: 'https://yanxuan-item.nosdn.127.net/2d942d6bc94f1e230763e1a5a3b379e1.png',
      },
      {
        id: '4001874',
        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',
        price: '488.00',
        picture: 'https://yanxuan-item.nosdn.127.net/44e51622800e4fceb6bee8e616da85fd.png',
      },
      {
        id: '4001649',
        name: '大师监制龙泉青瓷茶叶罐',
        price: '139.00',
        picture: 'https://yanxuan-item.nosdn.127.net/4356c9fc150753775fe56b465314f1eb.png',
      },
      {
        id: '3997185',
        name: '与众不同的口感汝瓷白酒杯套组1壶4杯',
        price: '108.00',
        picture: 'https://yanxuan-item.nosdn.127.net/8e21c794dfd3a4e8573273ddae50bce2.jpg',
      },
      {
        id: '3997403',
        name: '手工吹制更厚实白酒杯壶套装6壶6杯',
        price: '99.00',
        picture: 'https://yanxuan-item.nosdn.127.net/af2371a65f60bce152a61fc22745ff3f.jpg',
      },
      {
        id: '3998274',
        name: '德国百年工艺高端水晶玻璃红酒杯2支装',
        price: '139.00',
        picture: 'https://yanxuan-item.nosdn.127.net/8896b897b3ec6639bbd1134d66b9715c.jpg',
      },
    ]

    // 第一步:先封装一个渲染商品的函数,为了多次调用
    function render(data) {
      str = "";
      // 使用forEach循环,渲染商品
      data.forEach(item => {
        // 拼接字符串
        str += `<div class="item">
                  <img src=${item.picture} alt="">
                  <p class="name">${item.name}</p>
                  <p class="price">${item.price}</p>
                </div>`
      })
      // 渲染到页面上
      document.getElementById("list").innerHTML = str;
    }
    render(goodsList);
    // 第二步:注册点击事件
    let goodsPrice = document.getElementById("goodsPrice");
    goodsPrice.addEventListener("click", function (e) {
      // 获取点击元素的名称
      let tagName = e.target.tagName;
      // 获取点击元素的索引
      let index = e.target.dataset.index;
      let goodsArr = []; // 筛选后的新数组
      if (tagName == "A") {
        // 第三步:通过filter筛选数据,完成价格筛选
        switch (index) {
          case "1":
            goodsArr = goodsList.filter(item => item.price <= 100);
            break;

          case "2":
            goodsArr = goodsList.filter(item => item.price > 100 && item.price <= 300);
            break;

          case "3":
            goodsArr = goodsList.filter(item => item.price > 300);
            break;

          default:
            goodsArr = goodsList;
            break;
        }
      }
      render(goodsArr);
    })

  </script>
</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值