jquery - 使用 jQuery 显示和隐藏 div 后,Div 不会通过 CSS 隐藏

标签 jquery css

我有一个小网络应用程序,我在其中经常显示和隐藏 DIV。然而,有时我需要向那个隐藏 div 的 div 添加一个 CSS 类(使用 display:none 而不是 jQuery 的 hide() 函数),因为我仍然需要知道给定的 div 是否最初显示在屏幕上。我通常相应地使用 jQuery 的 addClassremoveClass

但是,我在执行此操作时遇到了问题。看起来如果 div 之前已经被隐藏和显示,添加一个 display:none 类到 div 是行不通的。

我想知道是否有任何类型的解决方法可以在不使用 hide() 的情况下使用。

这里有一些 JSFiddle 示例向您展示我在说什么:

JSFiddle Example 1 - 将使用 CSS 类正确隐藏 DIV。

JSFiddle Example 2 - 使用 show() 和 hide() 函数后,将无法使用 CSS 类正确隐藏 DIV。

最佳答案

您遇到的问题是 jQuery 的 hide() 函数向元素添加了内联 CSS:

<div id="divTest" class="hideDiv" style="display: block;">

display 设置为 block,因此您的 hideDiv 类将被内联覆盖,因为它在 CSS 规则中被认为是“更严格的”。一个有点难看的解决方法是将 hideDiv CSS 规则更改为:

.hideDiv
{
    display: none !important;
}

!important 部分将使其优先于内联 CSS。

编辑: 此外,我建议坚持使用一种显示/隐藏内容的方法(您自己的 jQuery)。使用 jQuery show/hide 进行所有显示/隐藏,但您仍然可以添加一个用于跟踪的类,只是不要让该类隐藏您的元素。

因此将按钮 JavaScript 改成这样:

$("#btnHideDiv").on("click", function()
{
    $("#divTest").addClass("hideDiv");
    $("#divTest").hide();
});

并从 hideDiv 类中完全删除隐藏的 CSS。现在,您仍然可以使用 jQuery 查找页面加载后隐藏的 div,而不会遇到隐藏/显示不起作用的情况,也不必求助于 !important

对于您的问题,我会说是一个更优雅的解决方案。

关于jquery - 使用 jQuery 显示和隐藏 div 后,Div 不会通过 CSS 隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11866498/

相关文章:

asp.net - 如何使用 ASP.NET MVC 增加 AJAX JSON 响应的 2MB 限制

javascript - 在 Firefox 中访问全局事件对象

html - 如何使父元素与绝对定位到祖 parent 的子元素大小相同?

javascript - 获取 div 使用的所有坐标

jquery - Bootstrap 3 的 Eonasdan DateTimePicker 不工作

javascript - 按字母顺序排列 div,并将空 div 放在底部

javascript - 如何像 Stack Overflow 一样显示弹出消息

javascript - 如何处理或最小化 jquery 中的紧耦合

html - :after float none not working and trying to find something else

jquery - 模糊容器中的背景图像,但不模糊容器中的内容