JS如何在兄弟节点子div为空时隐藏指定div并优化代码
现有代码存在的问题
- 变量名拼写错误:你声明的变量是
pgpShortcode,if判断中错误写成了pqpShortcode,运行时会直接抛出未定义变量的报错。 - 判断逻辑错误:
includes('')对任意字符串都会返回true,无论文本内容是否为空,所以你的代码会始终执行隐藏逻辑,完全达不到判断效果。 - 没有处理空白字符干扰:如果
Produktgrundpreis-Shortcode的子div里只有换行、空格这类空白字符,innerText不会是空字符串,你原本的判断逻辑会失效。 - 缺少函数调用:你只定义了
pgpSichtbarkeit函数,没有主动调用的代码,逻辑不会自动执行。 - 缺少DOM加载判断:如果JS代码在DOM还没渲染完成时就运行,
getElementById会返回null,触发空指针报错。
优化实现代码
// 等待页面DOM完全渲染后再执行逻辑 document.addEventListener('DOMContentLoaded', function () { pgpSichtbarkeit() }) function pgpSichtbarkeit() { // 提前获取两个目标元素,判断是否存在 const pgpTextEl = document.getElementById('Produktgrundpreis-Text') const pgpShortcodeEl = document.getElementById('Produktgrundpreis-Shortcode') if (!pgpTextEl || !pgpShortcodeEl) return // 去除文本前后所有空白字符后再判断是否为空 const shortcodeContent = pgpShortcodeEl.innerText.trim() if (shortcodeContent === '') { pgpTextEl.style.display = 'none' } // 如果需要内容不为空时自动显示,可以加下面的else逻辑 // else { // pgpTextEl.style.display = 'block' // } }
优化说明
- 新增
DOMContentLoaded监听,保证DOM元素渲染完成后再执行获取逻辑,避免获取不到元素的问题 - 先判断两个目标元素是否存在,避免空指针报错
- 使用
trim()清除文本前后的空格、换行、制表符等空白字符,避免空标签内的空白字符干扰判断结果 - 直接判断处理后的文本是否等于空字符串,逻辑精准没有歧义
- 变量名命名更清晰,没有拼写错误
内容的提问来源于stack exchange,提问作者rorar
相关产品推荐
相关产品推荐

