jQuery show () cho lớp css Twitter Bootstrap ẩn


89

Tôi đang sử dụng Twitter Bootstrap và tôi nhận thấy rằng jQuery show()hoặc fadeIn()không làm cho phần tử DOM được đánh dấu bằng lớp hiddenxuất hiện bởi vì các hàm jQuery chỉ loại bỏ display: noneđặc tả. Tuy nhiên, visibilityvẫn được đặt thành hidden.

Tôi tự hỏi cách tốt nhất có thể để giải quyết vấn đề này là gì?

  1. Xóa hiddenlớp trên phần tử
  2. Thay đổi thuộc tính hiển thị
  3. Ghi đè lớp ẩn trong css của riêng tôi

Đặc biệt, tôi muốn biết liệu sửa lỗi này bằng jQuery hay css thì tốt hơn và tại sao.


Tôi thường không sử dụng {display: hidden} vì nó khiến phần tử trong DOM chiếm dung lượng. Có một số lý do bạn cần phải làm như vậy?
isherwood

1
@isherwood Đây visibility: hiddenlà từ bootstrap đáp ứng.
Lim H.

Câu trả lời:


124

Lớp css bạn đang tìm là .collapse. Điều này đặt phần tử thànhdisplay: none;

Vì vậy, sử dụng $('#myelement').show()sẽ hoạt động đúng cách.

CẬP NHẬT: Bootstrap v3.3.6 đã cập nhật .collapse trở lại:

.collapse {
  display: none;
}

2
Đây phải là câu trả lời được chấp nhận. Nó cũng hoạt động với .slideDown(), .fadeIn()v.v. .hiddentrong Bootstrap dành cho những thứ bạn không bao giờ muốn hiển thị.
snumpy

Nó có gì mới trong bootstrap 3 không?
Lim H.

Không - tôi đã thấy nó được sử dụng trong tài liệu. <div class = "nav -ụp sụp đổ"> Dòng này được lấy từ các ví dụ v2.3.2.
Eoinii

33
Thật không may, câu trả lời này không còn hoạt động với Boostrap 3. .collapsebây giờ cũng được đặtvisibility: hidden;
Tom17

9
Hoạt động trong Bootstrap 3 của tôi?
James McCormack

21

Điều này sẽ làm mờ phần tử vô hình của bạn trong và xóa lớp

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

http://jsfiddle.net/7qxVL/

Nếu bạn không thực sự cần phần tử ẩn (tức là chiếm dung lượng) thì bạn có thể muốn xác định lại .hiised (trong css cục bộ của bạn, không thay đổi nguồn bootstrap, hoặc thậm chí tốt hơn, trong tệp LESS cục bộ của bạn).


Cảm ơn đã làm việc cho tôi! Tôi đã đơn giản hóa chỉ cần làm :: fadeIn (). RemoveClass ('hidden') - không cần thao tác trực tiếp hoặc ẩn css.
dbrin

1
Xem câu trả lời được đăng bởi @IrishJoker. Bạn không nên sử dụng .hiddencho các phần tử bạn muốn hiển thị bằng javascript. Sử dụng .collapsethay thế.
snumpy

13

Cảnh báo:

bootstrap 3.3.0 vừa thay đổi .collapse thành:

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

Đó là một thay đổi đột phá cho jQuery.show (), tôi đã phải hoàn nguyên về nội tuyến:

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

để tiếp tục sử dụng jQuery như sau:

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

Lớp duy nhất tôi có thể tìm thấy trong bootstrap 3.3.0 để áp dụng chỉ 'display: none' là

.navbar {
  display: none;
}

1
Tôi không thể thấy lý do chính đáng để Bootstrap làm điều này. Cá nhân tôi luôn có một tệp css khác, được sử dụng để 'ghi đè' cài đặt css - Tôi sẽ thay thế .collapse để chỉ có cài đặt hiển thị. Bằng cách này, bạn có thể tiến về phía trước mà không phải lo lắng về mọi thứ bị phá vỡ. Đau trong tin nhắn :(
Eoinii

Giải pháp trong Bootstrap 3.3.x là sử dụng .collapse('hide').collapse('show')thay vì các phương thức của jQuery. Bạn có thể đặt khả năng hiển thị ban đầu trực tiếp trong HTML thông qua lớp collapse(ẩn) hoặc collapse in(hiển thị). Xem getbootstrap.com/javascript/#collapse .
alexw

Phiên bản mới nhất 3.3.6 đã quay trở sự thay đổi này
Eoinii

5

Tôi đã từng gặp vấn đề tương tự. Tôi đã sử dụng bản vá này:

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

Sau đó, tôi gặp một vấn đề khác, vì ứng dụng của tôi tạo ra các phần tử mới và thêm / thêm chúng vào. Cuối cùng những gì tôi đã làm là sau khi tạo phần tử mới, tôi làm:

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

4

Đối với tôi, đó là bởi vì bootstrap đang sử dụng !importanthack cho cả ẩn và ẩn lớp.

Vì vậy, bạn không thể sử dụng các show()phương thức vv được cung cấp với jquery. Thay vào đó, bạn phải ghi đè lên mã thậm chí còn khủng khiếp hơn ghi đè lên mã hacky.

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

! important là phương án cuối cùng và thực sự không nên sử dụng trong thư viện lõi như bootstrap.


4

Điều này hoạt động, nhưng tôi sẽ thử câu trả lời đầu tiên và thay đổi các lớp thành .collapse.

.toggleClass('hidden')
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.