JS实现网页标题提取时If语句生效但Else语句不生效问题求助
问题原因定位
document.getElementsByTagName()方法无论是否找到对应元素,都会返回类数组的 HTMLCollection 集合对象,就算没有匹配元素也只会返回空集合,而空集合在JavaScript的布尔判断中属于真值(truthy),所以你的if判断条件永远成立,else分支自然永远不会触发。- 你代码中同时使用
getElementsByTagName和querySelectorAll两个DOM查询方法属于冗余操作,保留一个即可。
修复后的代码
function headingsEx() { let h = ["h1", "h2", "h3", "h4", "h5", "h6"]; for (let i of h) { let foundHs = document.querySelectorAll(i); // 改为判断匹配到的元素集合长度是否大于0 if (foundHs.length > 0) { for (let c of foundHs) { console.log({ [i]: c.textContent }); } } else { console.log(i + " doesn't exist"); } } } headingsEx();
补充说明
如果要保留getElementsByTagName写法,判断逻辑一致,只要判断返回集合的length属性是否大于0即可:
if (document.getElementsByTagName(i).length > 0) { // 存在对应标题的逻辑 } else { // 不存在的逻辑 }
内容的提问来源于stack exchange,提问作者TryingToLearn
相关产品推荐
相关产品推荐

