JavaScript对象实现排序

JavaScript对象实现排序

需求

将素材页面中的商品,按价格进行排序。
1.1 多次点击排序按钮,商品按价格升序和降序交替排列
1.2 第一次点击排序,所有商品按价格升序排列
1.3 随着升序与降序排列,箭头符号成上下的形状,
利用数组的sort函数和js对象完成排序。然后操作dom,重排页面
image-20211222101722879

实现

index.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet" href="css.css"/>
    <script src="main.js"></script>
</head>
<body>
    <nav onclick="sort()">排序(价格) <span class="down" id="jiantou"></span></nav>
    <ul id="pricesList">
        <li>
            <div>
                <img src="image/baby_1.jpg" alt=""/>
            </div>
            <p>
                产品1
            </p>
            <p>
                价格:345.00
            </p>
        </li>
        <li>
            <div>
                <img src="image/baby_2.jpg" alt=""/>
            </div>
            <p>
                产品2
            </p>
            <p>
                价格:133.00
            </p>
        </li>
        <li>
            <div>
                <img src="image/baby_3.jpg" alt=""/>
            </div>
            <p>
                产品3
            </p>
            <p>
                价格:52.00
            </p>
        </li>
        <li>
            <div>
                <img src="image/baby_4.jpg" alt=""/>
            </div>
            <p>
                产品4
            </p>
            <p>
                价格:223.00
            </p>
        </li>
        <li>
            <div>
                <img src="image/baby_5.jpg" alt=""/>
            </div>
            <p>
                产品5
            </p>
            <p>
                价格:655.00
            </p>
        </li>
        <li>
            <div>
                <img src="image/baby_6.jpg" alt=""/>
            </div>
            <p>
                产品6
            </p>
            <p>
                价格:142.00
            </p>
        </li>
    </ul>



</body>
</html>

main.js

var flag = false;
//定义Item对象,方便排序
function Item(imgsrc,itemname,price){
    this.imagesrc = imgsrc;
    this.itemname = itemname;
    this.price = parseFloat(price);
}
function compare(attr,flag) {
    //升序
    if (flag) {
        return function (a, b) {
            var value1 = a[attr];
            var value2 = b[attr];
            return value1 - value2;
        }
    }
    //降序
    else {
        return function (a, b) {
            var value1 = a[attr];
            var value2 = b[attr];
            return value2 - value1;
        }
    }
}

function sort(){
    //获取对象
    var obj = document.getElementById("pricesList");
    var list = obj.querySelectorAll("li");
    var itemlist = [];
    //将元素内的值封装成Item对象
    for (let i = 0; i < list.length; i++) {
        var temp = new Item(list[i].querySelector("img").src,list[i].querySelectorAll("p")[0].innerText,
            list[i].querySelectorAll("p")[1].innerText.replace("价格:",''));
        itemlist.push(temp);
    }
    flag = !flag;
    //排序
    itemlist.sort(compare("price",flag));
    //改变箭头方向
    if(flag) document.getElementById("jiantou").setAttribute("class","up");
    else document.getElementById("jiantou").setAttribute("class","down")
    //将排序后的值输出到页面
    for (let i = 0; i < itemlist.length; i++) {
        obj.querySelectorAll("li")[i].querySelector("img").src = itemlist[i].imagesrc;
        obj.querySelectorAll("li")[i].querySelectorAll("p")[0].innerText = itemlist[i].itemname;
        obj.querySelectorAll("li")[i].querySelectorAll("p")[1].innerText = "价格:" + itemlist[i].price;
    }
}

index.css

nav{
    background-color: gold;
    display: inline-block;
}
nav span{
    display: inline-block;
    width:16px;
    height: 16px;
    background-image: url("image/nav_arr_2x.png");
    background-size: 16px;

}
.down{
    background-position: 0px 4px;
}
.up{
    background-position: 0px -43px;
}
ul{
    padding-left: 0px;
}
ul>li{
    display: inline-block;
    width: 120px;
    box-sizing: border-box;
    padding: 5px;
    text-align: center;
}
li img{
    width: 110px;
}

image-20211222101953755

图片路径和名称根据实际情况修改

效果:

image-20211222102025750

image-20211222102032944

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bestkasscn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值