筛选商品案例

案例样式:

shang.png

1. HTML结构

   <div class="search">
        按照价格查询: <input type="text" class="start"> - <input type="text" class="end"> <button class="search-price">搜索</button> 按照商品名称查询: <input type="text" class="product"> <button class="search-pro">查询</button>
    </div>
    <table>
        <thead>
            <tr>
                <th>id</th>
                <th>产品名称</th>
                <th>价格</th>
            </tr>
        </thead>
        <tbody>
 </tbody>
    </table>

2. JS代码部分

 // 利用新增数组方法操作数据
        var data = [{
            id: 1,
            pname: '小米',
            price: 3999
        }, {
            id: 2,
            pname: 'oppo',
            price: 999
        }, {
            id: 3,
            pname: '荣耀',
            price: 1299
        }, {
            id: 4,
            pname: '华为',
            price: 1999
        }, ];

2.1 获取相应的元素

  var tbody = document.querySelector('tbody');
        var search_price = document.querySelector('.search-price');
        var start = document.querySelector('.start');
        var end = document.querySelector('.end');
        var product = document.querySelector('.product');
        var search_pro = document.querySelector('.search-pro');

2.2 使用 forEach 遍历数据并渲染到页面中

 setDate(data);
        // 2. 把数据渲染到页面中
        function setDate(mydata) {
            // 先清空原来tbody 里面的数据
            tbody.innerHTML = '';
           // 使用forEach 对数据进行遍历
            mydata.forEach(function(value) {
                // console.log(value);
                var tr = document.createElement('tr');
                tr.innerHTML = '<td>' + value.id + '</td><td>' + value.pname + '</td><td>' + value.price + '</td>';
                tbody.appendChild(tr);
            });
        }

2.3 根据价格筛选数据

  • 获取到搜索按钮并为其绑定点击事件
search_price.addEventListener('click', function() {
});
  • 使用filter将用户输入的价格信息筛选出来
 search_price.addEventListener('click', function() {
            // alert(11);
            var newDate = data.filter(function(value) {
                return value.price >= start.value && value.price <= end.value;
            });
            console.log(newDate);
            // 把筛选完之后的对象渲染到页面中
            setDate(newDate);
        });

2.4 将筛选出来的数据重新渲染到表格中

  • 将渲染数据的逻辑封装到一个函数中
function setDate(mydata) {
            // 先清空原来tbody 里面的数据
            tbody.innerHTML = '';
            mydata.forEach(function(value) {
                // console.log(value);
                var tr = document.createElement('tr');
                tr.innerHTML = '<td>' + value.id + '</td><td>' + value.pname + '</td><td>' + value.price + '</td>';
                tbody.appendChild(tr);
            });
        }
  • 将筛选之后的数据重新渲染
  // 当我们点击了按钮,就可以根据我们的商品价格去筛选数组里面的对象
        search_price.addEventListener('click', function() {
            // alert(11);
            var newDate = data.filter(function(value) {
                return value.price >= start.value && value.price <= end.value;
            });
            console.log(newDate);
            // 把筛选完之后的对象渲染到页面中
            setDate(newDate);
        });

2.5 根据商品名称筛选

  • 获取用户输入的商品名称
  • 为查询按钮绑定点击事件,将输入的商品名称与这个数据进行筛选
  // 如果查询数组中唯一的元素, 用some方法更合适,因为它找到这个元素,就不在进行循环,效率更高]
        search_pro.addEventListener('click', function() {
            var arr = [];
            data.some(function(value) {
                if (value.pname === product.value) {
                    // console.log(value);
                    arr.push(value);
                    return true; // return 后面必须写true  
                }
            });
            // 把拿到的数据渲染到页面中
            setDate(arr);
        })
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 定义数组对象数据 2 使用forEach遍历数据并渲染到页面中 3 根据价格筛选数据 获取到搜索按钮并为其绑定...
    新苡米阅读 171评论 0 1
  • 1.编程思想 2.对象与类 3.面向对象版tab 栏切换 4.构造函数和原型 5.继承 6.ES5新增方法 7.函...
    Scincyc阅读 567评论 0 0
  • 前言 应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序,也就是说这类程序一般独立运行。而B/S就是浏...
    hehuijun阅读 14,731评论 0 17
  • 一、面向过程与面向对象 1.1 面向过程(POP) 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一...
    AizawaSayo阅读 630评论 1 5
  • 静态成员和实例成员 实例成员实例成员就是构造函数内部通过this添加的成员 如下列代码中uname age sin...
    Grandperhaps阅读 237评论 0 0