主人稍等一会喵`(*>﹏<*)

jq


淘宝筛选效果

jQuery学完简单制作几个小项目

实现一个筛选菜单的效果

最终效果

淘宝筛选

需求

1.点击后要加入筛选栏,且每一个种类只能选择一个

2.再次点击已筛选的标签,会被取消选中,并返回“全部”标签

3.点击已筛选中的标签,可以删除标签,并将上方对应的恢复为“全部”,当上方点击全部时,也要删除下方对应的标签

4.在下方没有选择标签时,要显示“暂无选择的标签”

代码
<!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>Document</title>
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .filter-list>div {
            display: flex;
            margin-bottom: 50px;
        }

        .wrap {
            width: 1200px;
            margin: auto;
            border: 2px gray solid;
            border-radius: 2px;
            margin-top: 100px;
            padding: 20px 0;
        }

        .filter-list>div>p {
            margin-left: 20px;
        }

        .filter-list>div>p:not(.title, .text) {
            color: #436EEE
        }

        .filter-list>div>p:not(.title, .text, .marked):hover {
            background-color: rgba(246, 203, 144, 0.5);
            color: #EE9A00
        }

        p {
            padding: 10px;
        }

        .marked {
            color: white;
            background-color: #EE7600
        }
    </style>
</head>

<body>
    <div class="wrap">
        <div class="filter-list">
            <div class="clothes">
                <p class="title">上装:</p>
                <p class="all" id="all">全部</p>
                <p>针织衫</p>
                <p>毛衣外套</p>
                <p>T恤</p>
                <p>羽绒服</p>
                <p>棉衣</p>
                <p>卫衣</p>
                <p>风衣</p>
            </div>
            <div class="pants">
                <p class="title">裤装:</p>
                <p class="all" id="all">全部</p>
                <p>牛仔裤</p>
                <p>小脚/铅笔裤</p>
                <p>休闲裤</p>
                <p>打底裤</p>
                <p>哈伦裤</p>
            </div>
            <div class="skirts">
                <p class="title">裙装:</p>
                <p class="all" id="all">全部</p>
                <p>连衣裙</p>
                <p>半身裙</p>
                <p>长袖连衣裙</p>
                <p>中长款连衣裙</p>
            </div>
            <div class="select">
                <p class="title" style="font-weight:bold">已选条件:</p>
                <p class="text">暂时没有过滤条件</p>
            </div>
        </div>
    </div>

    <script>

        var addSelect = function (selector) {

            $(selector).addClass("temp");
            $(selector).clone().appendTo(".select");
            $(selector).removeClass("temp");

            var kind = $(selector).parent().attr("class");
            $(".temp").addClass(kind).append(" x").click(function () {
                //将上面的恢复成全部
                $("." + kind).children().removeClass("marked");
                $("." + kind).children(".all").addClass("marked");
                //删除这个class
                $(this).remove();
                //如果select子集长度为2,则恢复“暂时没有过滤条件”
                if ($(".select").children().length === 2) {
                    $(".text").css("display", "block");
                }
            }).removeClass("temp");
        }

        var mark = function (selector) {
            $(selector).addClass("marked");
        }

        var delForList = function (selector) {
            var kind = $(selector).parent().attr("class");
            $(".select").children("." + kind).remove();
        }

        mark(".all");
        $("p:not('.title')").click(function () {
            //检查除了点击元素外是否有其他同级标签被做过标记
            if ($(this).siblings(".marked").length != 0) {
                //如果有,则删除标记
                $(this).siblings(".marked").removeClass("marked");
                //并删除在过滤条件里的对应元素
                delForList(this);
            }

            //如果点的不是all
            if ($(this).attr("id")!="all") {
                //检查点击的是否为被标记的元素
                reg = /marked/;
                if (reg.test($(this).attr("class"))) {
                    //取消标记
                    $(this).removeClass("marked");
                    //并删除在过滤条件里的对应元素
                    delForList(this);
                    //将全部选项高亮
                    $(this).siblings(".all").addClass("marked");
                } else {
                    //做标记
                    mark(this);
                    //加入已选
                    addSelect(this);
                    //去掉“暂时没有过滤条件”
                    $(".text").css("display", "none");
                }
            } else {
                //如果为all则清空本列所有标记并清空列表中对应元素
                $(this).siblings("marked").removeClass("marked");
                $(this).addClass("marked");
                delForList(this);
            }
            //如果select子集长度为2,则恢复“暂时没有过滤条件”
            if ($(".select").children().length === 2) {
                $(".text").css("display", "block");
            }

        });

    </script>
</body>

</html>

文章作者: Razuberi
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Razuberi !
评论
  目录