You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery密码保护隐藏内容仅支持table标签,替换为div后失效求助

问题原因及解决方案

问题根源

核心问题出在CSS选择器的匹配逻辑上。你当前的CSS规则:

#table.show div>#HIDDENDIV {
  display: block;
}

要求#HIDDENDIV必须是某个div的直接子元素,且这个div位于带有show类的#table内部,才会触发显示效果。

但你替换为div/section后的HTML结构是:

<section id="table">
  <div id="HIDDENDIV">hidden stuff</div>
</section>

这里#HIDDENDIV是#table的直接子元素,中间没有额外的div层级,导致CSS选择器完全匹配不到,所以隐藏内容无法显示。

而之前使用table时能生效,是因为当时的结构(table→td)对应了匹配的选择器(比如你可能曾用#table.show td>#HIDDENDIV),替换标签后未同步调整CSS,才出现失效问题。

修复方案

方案1:简化CSS选择器(推荐)

直接针对#table.show下的#HIDDENDIV,忽略层级关系,这样无论外层是table、div还是section都能生效:

#HIDDENDIV {
  display: none;
}

#table.show #HIDDENDIV {
  display: block;
}

方案2:调整HTML结构(保留原CSS)

如果一定要保留原CSS的层级要求,在#table内部添加一层div包裹#HIDDENDIV:

<section id="table">
  <div>
    <div id="HIDDENDIV">hidden stuff</div>
  </div>
</section>

额外优化建议

你的JS代码存在潜在问题:event参数未声明,在严格模式下会报错;同时重复获取DOM元素也可以优化,修改后的代码如下:

$("#password").keydown(function(event) {
  if (event.keyCode == 13) document.getElementById('button').click()
});

$("#button").click(function() {
  const passwordInput = document.getElementById('password');
  if (passwordInput.value == '123') {
    document.getElementById('table').classList.toggle('show');
    document.getElementById('passw').style.display = 'none';
  } else {
    alert('Invalid Password!');
    passwordInput.setSelectionRange(0, passwordInput.value.length);
  }
});

内容的提问来源于stack exchange,提问作者Asma Binta Younus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:55:18