JQuery实现一个筛选数据的功能

前言

目的为了给我的博客标签页添加按标签数据进行筛选。

基于jekyll的博客。

实现效果:

标签页

uMKKSO.gif


标签页代码(再说)

标签页

自定义了一个数据:data-filter = “*” ,代表所有列表都显示。data-filter=”.” 以标签名作为要过滤的类名。

具体流程是这样的:

1. 定义筛选数据
根据标签名生成的按钮组
data-filter="."
<button data-filter="."></button>
2. 给循环渲染出来的每个标签列表添加类名以标签名作为类名
<section class="zero-grid-item ">...</section>
3. 进行JQuery的筛选

正好复习一下JQuery的遍历

// 返回选择元素的直接子元素
children()
// 返回被选择元素的第一个元素
first()
// 返回拥有一个或多个元素在内的所有元素
has()
// 返回所选元素的直接父元素
parent()
// 根据需要匹配的选择器过滤元素返回
filter()
// 与filter相对,返回不符合的元素
not()

它们接受一些匹配的规则返回一些元素集合。

具体的实现:

$(document).ready(function () {
    $('#zero-filter').children().click(function(){
        // 获取自定义的属性
        var data_filter = $(this).attr("data-filter");
        // 重复点击时取消这个标签的激活和切换到全部
        if ($(this).hasClass("active") && data_filter!=='*') {
            $(this).removeClass("active");
            $("#zero-filterItem").children().removeClass("hidden").fadeIn();
            return  $('#zero-filter button').first().addClass("active");
        }
        // 移除所有已经选择过的按钮 active
        $("#zero-filter").children().removeClass("active");
        // 如果点击的当前按钮不是所有    
        if(data_filter!=='*' && !$(this).hasClass("active")){
            // 将过滤具体的标签列表选择返回符合的项目
            // 移除隐藏的类名
            // 显示出来。
            $("#zero-filterItem")
                .children()
                .filter(data_filter)
                .removeClass("hidden")
                .fadeIn();
            /*
        不符合条件的添加隐藏的类名
        移除出去
        */
            $("#zero-filterItem")
                .children()
                .not(data_filter)
                .addClass("hidden")
                .fadeOut();
            // 给这个按钮一个激活状态    
            return $(this).addClass("active");
        }else if(data_filter==='*') {
            // 如果是全部就移除所有的隐藏显示出来
            $("#zero-filterItem")
                .children()
                .removeClass("hidden")
                .fadeIn();
            return $(this).addClass("active");
        }
});});

总结

综合使用了JQuery的遍历DOM进行元素的操作,包括获取筛选的元素,添加类名,移除类名,使用自定义属性值以进行筛选。



奖励一下