jQuery show()为Twitter Bootstrap隐藏了css类

我使用的是Twitter Bootstrap,我注意到jQuery show()或者fadeIn()并没有让DOM元素标记为hidden类,因为jQuery函数只能删除display: none规范。 但是, visibility仍然是hidden

我想知道什么是最好的方法来解决这个问题?

  1. 删除元素上的hidden
  2. 更改可见性属性
  3. 用我自己的CSS覆盖隐藏的类

特别是,我想知道是否解决这个与jQuery或CSS更好,为什么。

你正在寻找的CSS类是.collapse 。 这设置要display: none;的元素display: none;

所以使用$('#myelement').show()将正常工作。

更新: Bootstrap v3.3.6已更新.collapse回:

 .collapse { display: none; } 

这将淡化你的无形元素,并删除类

 $('#element.hidden').css('visibility','visible').hide().fadeIn().removeClass('hidden'); 

http://jsfiddle.net/7qxVL/

如果你真的不需要元素是不可见的(即占用空间),你可能想重新定义.hidden(在你本地的css中,不要改变引导源,或者更好的,在你本地的LESS文件中)。

警告:

bootstrap 3.3.0刚更改.collapse为:

 .collapse { display: none; visibility: hidden; } 

这是jQuery.show()的重大改变我不得不恢复到内联:

 <div class="alert alert-danger" style="display:none;" > </div> 

继续使用jQuery如下:

 $('.alert).html("Change a few things up and try submitting again.").show() 

我只能在bootstrap 3.3.0中find适用于'display:none'的类

 .navbar { display: none; } 

我有同样的问题。 我使用这个补丁:

 $(function() { $('.hidden').hide().removeClass('hidden'); }); 

然后我有另一个问题,因为我的应用程序生成新的元素,并追加/ prepend他们。 我最终做的是在产生了我所做的新元素之后:

 var newEl = ...; $(newEl).find('.hidden').hide().removeClass('hidden'); 

对我来说,这是因为引导程序正在使用!important隐藏和隐藏的!important黑客。

所以你不能使用jQuery提供的show()等方法。 相反,你必须覆盖更糟糕的代码覆盖hacky代码。

 $('#myelement').attr('style', 'display: block !important'); 

!重要的是最后的手段选项,真的不应该在像bootstrap这样的核心库中使用。

这有效,但我会尝试第一个答案,并将类更改为.collapse

 .toggleClass('hidden')