直接用 matches() 配合属性选择器可高效判断元素是否含特定 data-* 属性:el.matches('[data-category]') 检查存在性,'[data-price="99"]' 检查精确值,'[data-tag~="hot"]' 检查空格分隔值;批量筛选优先用 querySelectorAll('[data-category]'),特殊属性名需加引号,兼容场景可用 hasAttribute() 替代存在性检查。
直接用matches()data-*matches()matches()data-[data-xxx]el.matches('[data-category]')data-categoryel.matches('[data-price="99"]')data-price"99"el.matches('[data-tag~="hot"]')data-tag"hot"filter()matches()const list = document.querySelectorAll('.item');
const withCategory = Array.from(list).filter(el => el.matches('[data-category]'));
const featured = Array.from(list).filter(el => el.matches('[data-featured]'));querySelectorAll('[data-category]')matches()data-data-2024-activematches()el.matches('[data-2024-active]')el.matches('[data-2024-active="true"]')el.matches('data-2024-active')el.matches('[data-2024-active=true]')matches()msMatchesSelectorhasAttribute()el.hasAttribute('data-category')el.matches('[data-category]')hasAttribute()matches()