项目练习:表格的查改功能

我们拿到一个后台数据json文件如下:

{
    "data":[{
        "id":1,
        "price":38.00,
        "goodsName":"小熊电器",
        "status":0,
        "desc":"一个让人爱上做饭的小电器"
    },{
        "id":2,
        "price":58.01,
        "goodsName":"美的空调",
        "status":1,
        "desc":"一个让人爱上夏天的救命稻草"
    },{
        "id":3,
        "price":78.02,
        "goodsName":"格力空调",
        "status":0,
        "desc":"格力空调很好很给力"
    },{
        "id":4,
        "price":98.10,
        "goodsName":"菲力牛排",
        "status":1,
        "desc":"口感超级嫩超级好吃"
    },{
        "id":5,
        "price":200.00,
        "goodsName":"劳力士",
        "status":1,
        "desc":"这点价钱还想买真的劳力士?"
    }]
}

要求如下:

第一个:我们在一个表格体现出json文件中的数据,并且可以根据他的status可以改变我们表格的内容.

第二个:点击查看详情,能将desc的内容呈现在我们的页面上(可以利用我们的ID的唯一性来调用数据).

第三个:要求价格的总计,可以根据我们的筛选而跟着变化价格

可以尝试着去写一下,这个练习可以尽量运用我们ES6的新增属性来实现,我将实现代码贴在下方,如果想不到也可以参考一下,非常锻炼我们工作中运用到的场景,为了可以更好的模拟,给亲们提个要求,一定要注意更新我们获取的是不是最新的数据,如何获取最新的数据?这些,在敲代码的时候一定要考虑到.

实现代码如下:

html代码部分:

<body>
    <select name="" id="" onchange="changeFn(this)">
        <option value="2">全部商品</option>
        <option value="1">已发货</option>
        <option value="0">未发货</option>
    </select>
    <table border="1" cellpadding="10">
        <thead>
            <tr>
                <th>商品名称</th>
                <th>商品价格</th>
                <!-- 如果status是1 显示已发货 0 代表未发货 -->
                <th>是否发货</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            <!-- <tr>
                <td>小熊饼干</td>
                <td>100.00</td>
                <td>已发货</td>
                <td><button>查看详情</button></td>
            </tr> -->
        </tbody>
    </table>
    <h1 id="allPrice"></h1>

    <div id="tk" style="display: none;">
        <!-- <h2>商品名称:小熊豆干</h2>
        <h2>商品价格:89.00</h2>
        <h2>是否发货:已发货</h2>
        <h2>商品描述:我是小区保安,爱吃小熊豆干,搂着业主小安,维护一方平安!</h2> -->
    </div>

js部分代码,为了锻炼我们使用原生代码的能力顺便复习,所以还是使用原生代码来写:

<script>
        /* 全局变量 */
    
        /* 获取表格数据 */
        getList();

        function look(id) {
            console.log(id)
            getList("3",id);
        }   

        function getList(s,id) {
            var xhr = new XMLHttpRequest();
            xhr.open("get", "./goods.json", true);
            xhr.send();
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var res = JSON.parse(xhr.responseText).data;
                    console.log(res);
                    if (s == "0") {
                        let arr = res.filter(function (item) {
                            return item.status == 0
                        })
                        showPage(arr)
                    }else if (s == "1") {
                        let arr = res.filter(function (item) {
                            return item.status == 1
                        })
                        showPage(arr)

                    }else if(s=="3"){
                        let obj = res.find(function (v) {
                            return v.id == id;
                        })
                        console.log(obj);
                        document.querySelector("#tk").innerHTML = `
                            <h2>商品名称:${obj.goodsName}</h2>
                            <h2>商品价格:${obj.price.toFixed(2)}</h2>
                            <h2>是否发货:${obj.status == 0 ? "未发货" : obj.status == 1 ? "已发货" : "物品丢失"}</h2>
                            <h2>商品描述:${obj.desc}</h2>
                        `;
                        document.querySelector("#tk").style.display = "block";
                    }
                    else{
                        showPage(res);
                    }
                }
            }
        }
        function showPage(res) {
            var str = "";
            res.forEach(function (item, index) {
                str += `
                            <tr>
                                <td>${item.goodsName}</td>
                                <td>${item.price.toFixed(2)}</td>
                                <td>${item.status == 0 ? "未发货" : item.status == 1 ? "已发货" : "物品丢失"}</td>
                                <td><button onclick="look(${item.id})">查看详情</button></td>
                            </tr>
                        `
            })
            document.querySelector("tbody").innerHTML = str;

            var priceArr = res.map(function (v) {
                return v.price
            })
            console.log(priceArr)
            var sum = priceArr.reduce(function (a, b) {
                console.log(a, b);
                return a + b;
            })
            console.log(sum)
            document.querySelector("#allPrice").innerHTML = "总价格:" + sum.toFixed(2);
        }
        function statusFn(s) {
            if (s == 0) {
                return "未发货"
            } else if (s == 1) {
                return "已发货"
            } else {
                return "物品丢失"
            }
        }

        /* 选择状态 */
        function changeFn(that) {
            console.log(that.value);
            switch (that.value) {
                case "0":
                    getList("0");
                    break;

                case "1":
                    getList("1");
                    break;

                case "2":
                    getList("2");
                    break;
            }
        }
    </script>

以上就是一个简单地练习,你学会了??

在代码如何提高自己的能力,没有捷径,只有不停的内卷,多多练习,加油!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值