如何从选择器结果提取特定前缀类并隐藏对应扩展类元素
解决方案
你的代码失效的核心问题是正则表达式没匹配到类名里的下划线——你要匹配的类名是some_class_1这种格式,但用的/some_class\d+/只会匹配some_class后跟数字的情况,漏掉了中间的_,导致根本提取不到目标类名。
修正后的实现步骤如下:
- 修正正则,准确匹配带下划线的目标类名
- 过滤无效的提取结果,生成带
extra后缀的选择器 - 批量隐藏对应元素
完整代码:
// 提取所有带some_class_前缀的类名 let classes = elements.map(function() { return (this.className.match(/some_class_\d+/) || []).pop(); }).get(); // 生成目标选择器:给提取到的类名加上extra后缀,转成CSS选择器 let targetSelectors = classes .filter(cls => cls) // 排除没匹配到类名的空值 .map(cls => `.${cls}extra`); // 批量隐藏所有符合条件的元素 if (targetSelectors.length) { $(targetSelectors.join(',')).hide(); }
额外说明:
- 如果单个元素可能有多个符合前缀的类名,可改用
matchAll提取所有匹配项,再统一处理 - 加
filter是为了避免生成.undefinedextra这种无效选择器,影响性能
内容的提问来源于stack exchange,提问作者pileup
相关产品推荐
相关产品推荐

