jQuery & CSS - Xóa / Thêm hiển thị: không có


122

Tôi có một div với lớp này:

.news{
  width:710px; 
  float:left;
  border-bottom:1px #000000 solid;
  font-weight:bold;
  display:none;
}

Và tôi muốn với một số phương thức jQuery loại bỏ hiển thị đó: none; (vì vậy div sẽ hiển thị) và hơn thêm nó một lần nữa (vì vậy div sẽ đổ bóng).

Tôi làm nó như thế nào? Chúc mừng


3
jQuery $(".news").show()? "so the div will shadow" ... ý bạn là nó sẽ mờ dần đi ??
JCOC611

Yeah $(".news").show()hoạt động! Giống nhau $(".news").hide()!!! Cảm ơn;)
markzzz

2
Bạn có thể ngưng tụ mà xuống một tuyên bố với$('.news').toggle();
Eli Gundry

Câu trả lời:


209

Để ẩn div

$('.news').hide();

hoặc là

$('.news').css('display','none');

và để hiển thị div:

$('.news').show();

hoặc là

$('.news').css('display','block');

2
$ ('. news'). css ('display', 'block'); đã làm cho tôi! cảm ơn Shehal!
Jitesh Sojitra,

Làm cách nào để đặt lại kiểu 'hiển thị' thành bất kỳ kiểu nào đã được đặt trong CSS ngay từ đầu và không để 'chặn'?
ed22

73

jQuery cung cấp cho bạn:

$(".news").hide();
$(".news").show();

Sau đó, bạn có thể dễ dàng hiển thị và ẩn (các) phần tử.


38
Vấn đề là, .show()cũng không loại bỏ display: none, mà thay vào đó là đặt display: blockhoặc inlinetùy thuộc vào phần tử, và nó có thể phá vỡ bố cục nếu phần tử sử dụng displayphong cách khác thường .
lolesque

@lolesque Tôi đã tìm thấy một 'hack' đơn giản để khắc phục sự cố đó. Đơn giản chỉ cần sử dụng element{display:none;}trong css của bạn, nhưng trong js của bạn, cũng sử dụng element.hide()cùng một lúc. Điều này sẽ cho phép show()chức năng hoạt động.
Jarrod

16

Vì vậy, hãy để tôi cung cấp cho bạn mã mẫu:

<div class="news">
Blah, blah, blah. I'm hidden.
</div>

<a class="trigger">Hide/Show News</a>

Liên kết sẽ là trình kích hoạt để hiển thị div khi được nhấp vào. Vì vậy, Javascript của bạn sẽ là:

$('.trigger').click(function() {
   $('.news').toggle();
});

Bạn hầu như luôn luôn tốt hơn nên để jQuery xử lý việc tạo kiểu cho các phần tử ẩn và hiển thị.

Chỉnh sửa: Tôi thấy những người ở trên đang giới thiệu sử dụng .show.hidecho điều này. .togglecho phép bạn làm cả hai chỉ với một hiệu ứng. Thật tuyệt.


Ý tưởng tốt để hiển thị togglechức năng. Nhiều khi bạn cần nhấp vào thứ gì đó và hiển thị nó, bạn cũng muốn chức năng ẩn nó đi.
user3267755

16

Trong JavaScript:

getElementById("id").style.display = null;

Trong jQuery:

$("#id").css("display","");

Tôi đã phải sử dụng $ ("# id"). Css ('display', ''); để làm cho nó hoạt động đúng trong việc loại bỏ các phong cách nội tuyến cho "hiển thị"
TrippinBilly

1
Tôi cũng vậy @TrippinBill (sử dụng Mac Firefox 43) - đã gửi một bản chỉnh sửa. Đây dường như là cách duy nhất để xóa thuộc tính CSS thay vì đảo ngược nó. Điều này cho phép nó được ghi đè bởi các bài tập CSS rộng hơn, trong khi đảo ngược nó thì không.
Chris


8

tôi khuyên bạn nên thêm một lớp để hiển thị / ẩn các phần tử:

.hide { display:none; }

và sau đó sử dụng .toggleClass () của jquery để hiển thị / ẩn phần tử:

$(".news").toggleClass("hide");

7

Cách duy nhất để xóa nội tuyến "display: none" qua css-api của jQuery là đặt lại nó bằng chuỗi trống ( nullKHÔNG hoạt động btw !!).

Theo tài liệu jQuery, đây là cách chung để "loại bỏ" thuộc tính kiểu nội tuyến đã được thiết lập một lần.

$("#mydiv").css("display","");

hoặc là

$("#mydiv").css({display:""});

nên làm đúng thủ thuật.

IMHO có một phương thức bị thiếu trong jQuery có thể được gọi là "unhide" hoặc "Reveal" mà thay vì chỉ đặt thuộc tính kiểu nội tuyến khác sẽ không đặt giá trị hiển thị đúng như mô tả ở trên. Hoặc có thể hide()nên lưu trữ giá trị nội tuyến ban đầu và show()nên khôi phục lại ...


6

Các hàm .show () và .hide () của jQuery có lẽ là lựa chọn tốt nhất của bạn.


5

Bạn không cung cấp cho chúng tôi nhiều thông tin nhưng nói chung đây có thể là một giải pháp:

$("div.news").css("display", "block");

Bạn cần thông tin nào khác? Tôi nghĩ đó là một câu hỏi đơn giản, phải không? Dù sao, tôi giải quyết bằng cách sử dụng $(".news").show()$(".news").hide();)
markzzz

Một câu hỏi phổ biến là: có nhiều div.news trên trang không. Trong trường hợp này, điều này sẽ hiển thị tất cả chúng.
Yorian

4

Vì một số lý do, chuyển đổi không hoạt động với tôi và tôi đã nhận được lỗi uncaught type error toggle is not a functionkhi kiểm tra phần tử trong trình duyệt. Vì vậy, tôi đã sử dụng đoạn mã sau và nó bắt đầu hoạt động với tôi.

$(".trigger").click(function () {
    $('.news').attr('style', 'display:none');
})

Tập tin script jquery đã sử dụng jquery-2.1.3.min.js.


3

Nếu bạn có nhiều yếu tố bạn muốn .hide()hoặc .show(), bạn sẽ lãng phí rất nhiều tài nguyên để làm những gì bạn muốn - ngay cả khi sử dụng .hide(0)hoặc .show(0)- tham số 0 là thời lượng của hoạt ảnh.

Trái ngược với Prototype.js .hide().show()các phương thức chỉ được sử dụng để thao tác thuộc tính hiển thị của phần tử, việc triển khai của jQuery phức tạp hơn và không được khuyến nghị cho một số lượng lớn phần tử.

Trong trường hợp này, bạn có thể nên cố gắng .css('display','none')ẩn và .css('display','')hiện

.css('display','block') nên tránh, đặc biệt nếu bạn đang làm việc với các phần tử nội tuyến, hàng bảng (thực tế là bất kỳ phần tử bảng nào), v.v.


1

Xem xét nhận xét của lolesque để trả lời tốt nhất, bạn có thể thêm một thuộc tính hoặc một lớp để hiển thị / ẩn các phần tử có thuộc tính hiển thị khác với những gì nó thường có, nếu trang web của bạn cần tính tương thích ngược, tôi khuyên bạn nên tạo một lớp và thêm / xóa nó để hiển thị / hiển thị phần tử

.news-show {
display:inline-block;
}

.news-hide {
display:none;
}

Thay thế nội tuyến bằng phương pháp hiển thị ưa thích của bạn mà bạn chọn và sử dụng jquerys addclass https://api.jquery.com/addclass/ và removeclass https://api.jquery.com/removeclass/ thay vì show / hide, nếu ngược khả năng tương thích là không có vấn đề, bạn có thể sử dụng các thuộc tính như thế này.

.news[data-news-visible=show] {
display:inline-block;
}

.news[data-news-visible=hide] {
display:none;
}

Và sử dụng jquerys attr () http://api.jquery.com/attr/ để hiển thị và ẩn phần tử.

Cho dù bạn thích phương pháp nào thì nó cũng giúp bạn có thể dễ dàng triển khai hoạt ảnh css3 khi hiển thị / ẩn các phần tử theo cách này


0

Sử dụng show()bổ sung display:blockthay thế cho display:hidenhững thứ có thể phá vỡ mọi thứ.

Để tránh điều đó, bạn có thể có một lớp với thuộc tính display:nonevà chuyển đổi lớp đó cho phần tử đó với toggleClass().

$("button").on('click', function(event){  $("div").toggleClass("hide"); });
.hide{
   display:none;
}

div{
   width:40px;
   height:40px;
   background:#000;
   margin-bottom:20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div></div>
<button>Toggle Box</button>

Không có câu trả lời nào đề cập đến điều này.

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.