jQuery如何实现URL多关键词OR匹配检测并隐藏指定元素
问题根因
String.indexOf() 方法本身不支持传入多个关键词实现多匹配,该方法的第二个参数是查找操作的起始位置,而非第二个待匹配关键词,因此你原有代码的逻辑完全不符合预期,无法实现多关键词OR匹配效果。
修复方案
以下是可直接复用的多关键词OR匹配实现,后续新增匹配关键词仅需修改关键词数组即可:
jQuery( document ).ready(function() { // 所有待匹配的关键词统一放在该数组中,新增关键词直接追加元素即可 const matchKeywords = ['term1', 'term2']; // 检测URL是否包含任意一个关键词,匹配到任意一项即返回true const urlHasKeyword = matchKeywords.some(item => window.location.href.includes(item)); // 原逻辑:未匹配到任意关键词时隐藏元素 if (!urlHasKeyword) { document.getElementById("element").style.display = "none"; } // 若你需要改为「匹配到任意关键词就隐藏元素」,替换上面的判断为以下代码即可 // if (urlHasKeyword) { // document.getElementById("element").style.display = "none"; // } });
可选优化项
- 若需要实现大小写不敏感的匹配,把匹配逻辑改为
window.location.href.toLowerCase().includes(item.toLowerCase())即可 - 如果你需要兼容非常老旧的浏览器(不支持ES6语法),可以用for循环实现相同逻辑,示例如下:
jQuery( document ).ready(function() { const matchKeywords = ['term1', 'term2']; let urlHasKeyword = false; for (let i = 0; i < matchKeywords.length; i++) { if (window.location.href.indexOf(matchKeywords[i]) > -1) { urlHasKeyword = true; break; } } if (!urlHasKeyword) { document.getElementById("element").style.display = "none"; } });
内容的提问来源于stack exchange,提问作者nonliner
相关产品推荐
相关产品推荐

