You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript过滤器可获取全部data属性却无法匹配多个DOM元素问题排查

问题原因

你的过滤器只能匹配单个DOM元素的核心问题出在filterValues函数的判断逻辑上:

if (itemAttribute.includes(result))

这里的result是包含多个分类值的数组,当你把数组传入字符串的includes()方法时,数组会被隐式转换为逗号分隔的字符串(比如["category-a","category-a"]会变成"category-a,category-a")。而itemAttribute是单个分类的字符串(比如"category-a"),单个分类字符串不可能包含这个拼接后的长字符串,只有当result是单元素数组时(对应只有一个元素的分类),转换后的字符串才和itemAttribute一致,这就导致只有单元素分类能被匹配,多元素分类无法正常匹配。

另外,你构建attributeArray和result数组的步骤完全多余,既增加了代码复杂度,又没有实际作用。

修复方案

直接跳过中间数组的构建,用按钮的data-filter值和每个DOM元素的data-filter值直接比较即可:

修正后的filterValues函数

function filterValues(arr, btnData) {
    const btnAttribute = btnData.getAttribute('data-filter');
    
    arr.forEach(item => {
        const itemAttribute = item.getAttribute('data-filter');
        // 直接比较属性值,匹配则显示边框
        if (itemAttribute === btnAttribute) {
            item.style.border = '2px solid blue';
        }
    })
}

完整修正后的JavaScript代码

"use strict";

const filterBtns = Array.from(document.querySelectorAll("button.btn"));
const itemTag = Array.from(document.querySelectorAll("div.item"));

function applyFilter() {
    filterBtns.forEach((btn, idx) => {
        btn.addEventListener("click", () => {
            if (idx === 0) {
                itemTag.forEach(item => {
                    item.style.border = 'solid 2px red';
                })
            } else {
                itemTag.forEach(item => {
                    item.style.border = 'solid 2px transparent';
                })
                filterValues(itemTag, btn)
            }
        })
    })
}

function filterValues(arr, btnData) {
    const btnAttribute = btnData.getAttribute('data-filter');
    
    arr.forEach(item => {
        const itemAttribute = item.getAttribute('data-filter');
        if (itemAttribute === btnAttribute) {
            item.style.border = '2px solid blue';
        }
    })
}

applyFilter();

修改后,点击分类按钮就能匹配到所有对应分类的DOM元素,每个分类会展示所有对应的博客文章。

内容的提问来源于stack exchange,提问作者rojey12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:31:19