如何使 jquery.show() 将显示设置为 'block' 以外的内容

How to make jquery.show() set display to something other than 'block'

我正在开发一个单页网络应用程序,所以我有很多 HTML div 的相关 CSS 规则设置 "display: none;" 取决于根据用户的操作,我使用 $('#some-id').css('display', 'block') 之类的东西将显示设置为 [=21= 以外的东西].这使得 div 可见,一切正常。

但这很难看,因为我的 JavaScript 代码必须知道每个 div 的 "display" 使用什么值。一般是 "block," "inline," 或者 "grid." 这个信息应该在 CSS 里,而不是在 JavaScript.

我尝试使用 jquery.show() 和 jquery.hide(),但是如果开始显示为 "none.",那总是会导致显示设置为 "block"希望 CSS 中有某种方法可以指示 div 的正确值,而不是 "none." 但我还没有找到类似的东西。

有没有更优雅的方案?

你可以直接使用

$(whatever).css('display', 'what you want');

删除内联样式属性类似于另一个问题:Use jQuery to remove an inline style

一个更优雅的解决方案是使用 classes。

如您所说,display 信息在您的 CSS 文件中。最简单和最易读的解决方案是向应该隐藏的元素添加 .hidden class。

在您的 CSS 文件中:

.hidden {display: none;}

在 jQuery 中切换 class:

// Equivalent of hide():
$(el).addClass("hidden")

// Equivalent of show():
$(el).removeClass("hidden")

您无需再添加任何内容。没有额外的 CSS 规则或任何东西。如果您使用的是特定规则,则可能需要添加 !important。我认为这是合理使用它的情况之一,即:

.hidden {display: none !important;}

现在所有具有 hidden class 的元素都将被隐藏,即使它们的选择器更具体。

也许您可以尝试 css 初始显示来恢复元素(内联或块)的原始显示。

$('#some-id').css('display', 'initial'); 
$('#element').show();
%('#element').css('display','inline')

$('#element').addClass('show');

在样式表中:

.show{
   display: inline;
}

两者都应该可以正常工作。不知道还有什么办法。