JavaScript中使用indexOf匹配多个字符串的实现疑问
解决JavaScript检查innerHTML包含任意指定ID的问题
嘿,我来帮你修正这段代码~你的思路是对的,但写法上踩了逻辑或操作符的小坑,咱们一步步来理清楚:
原代码的问题
你写的"76561198331632938" || "id2"其实不会同时检查两个ID,因为逻辑或||会返回第一个真值——而非空字符串都是真值,所以这个表达式最终只会返回第一个ID字符串,相当于你的条件只判断了innerHTML是否包含76561198331632938,完全没生效第二个ID的检查。
另外还要注意:如果document.getElementById("id")找不到元素,会返回null,直接访问null.innerHTML会报错,所以最好先判断元素是否存在。
几种正确的实现方式
方式1:分开使用indexOf + 逻辑或
适合ID数量少的场景,写法直观:
// 先获取目标元素并判断是否存在 var targetEl = document.getElementById("id"); if (targetEl && (targetEl.innerHTML.indexOf("76561198331632938") !== -1 || targetEl.innerHTML.indexOf("id2") !== -1)) { console.log("Hello world!"); }
方式2:用数组+some方法(推荐,可扩展性强)
如果后续要加更多ID,直接往数组里加就行,维护起来更方便:
var targetEl = document.getElementById("id"); // 把需要检查的ID都放在数组里 var checkIds = ["76561198331632938", "id2"]; // some()会遍历数组,只要有一个ID匹配就返回true if (targetEl && checkIds.some(id => targetEl.innerHTML.includes(id))) { console.log("Hello world!"); }
这里用includes()代替indexOf(),返回的是布尔值,代码可读性更高。
方式3:正则表达式
适合需要更精确匹配的场景(比如要避免ID被其他字符串包含的情况,可以加边界符\b):
var targetEl = document.getElementById("id"); // 用|分隔多个匹配项 var idRegex = /76561198331632938|id2/; // test()方法检查字符串是否匹配正则 if (targetEl && idRegex.test(targetEl.innerHTML)) { console.log("Hello world!"); }
如果需要精确匹配整个ID(比如避免id23被误判为id2),可以改成/\b(76561198331632938|id2)\b/。
内容的提问来源于stack exchange,提问作者Domien
相关产品推荐
相关产品推荐

