2012-03-08 12 views
284

Trong jQuery, có các phương thức .hide().show() đặt cài đặt CSS display: none.Tương đương với jQuery .hide() để đặt chế độ hiển thị: ẩn

Có chức năng tương đương nào sẽ đặt cài đặt visibility: hidden không?

Tôi biết tôi có thể sử dụng .css() nhưng tôi thích một số chức năng như .hide() hoặc hơn. Cảm ơn.

+2

Bạn có thể thực hiện dựa trên của riêng bạn trên '.toggle()' – zerkms

+0

Tôi cũng là một fan hâm mộ của jQuery toggleClass() phương pháp này :) http://jqueryui.com/toggleClass/ Hãy kiểm tra các ví dụ tôi chia sẻ trong câu trả lời của tôi dưới đây http://stackoverflow.com/a/ 14632687/1056713 –

Trả lời

364

Bạn có thể tạo các plugin của riêng mình.

jQuery.fn.visible = function() { 
    return this.css('visibility', 'visible'); 
}; 

jQuery.fn.invisible = function() { 
    return this.css('visibility', 'hidden'); 
}; 

jQuery.fn.visibilityToggle = function() { 
    return this.css('visibility', function(i, visibility) { 
     return (visibility == 'visible') ? 'hidden' : 'visible'; 
    }); 
}; 

Nếu bạn muốn quá tải bản gốc jQuery toggle(), mà tôi không khuyên bạn nên ...

!(function($) { 
    var toggle = $.fn.toggle; 
    $.fn.toggle = function() { 
     var args = $.makeArray(arguments), 
      lastArg = args.pop(); 

     if (lastArg == 'visibility') { 
      return this.visibilityToggle(); 
     } 

     return toggle.apply(this, arguments); 
    }; 
})(jQuery); 

jsFiddle.

+1

Alex, cảm ơn. Bạn có thể sử dụng hàm '.toggle()' thay thế không? – TMS

+0

@Tomas Bạn sẽ phải đổ bóng 'toggle()' để có thể phá vỡ các tập lệnh khác. Nếu bạn muốn, bạn có thể thêm một đối số bổ sung vào 'toggle()' để xác định liệu 'visibility' hoặc' display' có được bật hay không.Tuy nhiên, tôi chỉ sử dụng tùy chỉnh trong ví dụ cuối cùng của mình. :) – alex

+0

Bạn có thể đăng một ví dụ về cách hỗ trợ các tham số bổ sung của 'show' (tốc độ, giảm bớt, gọi lại) không? – georg

89

Không có một xây dựng trong nhưng bạn có thể viết riêng của bạn khá dễ dàng:

(function($) { 
    $.fn.invisible = function() { 
     return this.each(function() { 
      $(this).css("visibility", "hidden"); 
     }); 
    }; 
    $.fn.visible = function() { 
     return this.each(function() { 
      $(this).css("visibility", "visible"); 
     }); 
    }; 
}(jQuery)); 

Sau đó bạn có thể gọi đây là như vậy:

$("#someElem").invisible(); 
$("#someOther").visible(); 

Dưới đây là một working example.

+16

+1 Bạn không cần '.each': http://jsfiddle.net/nGhjQ/2/. – pimvdb

+1

Điểm tốt, chỉ là một thói quen. Cảm ơn. 1 để trả lời của alex! –

+0

Chỉ cần tò mò, điểm trong việc gói hai hàm này trong '(function ($) {...} (jQuery));' wrapper là gì? Tôi chưa bao giờ định nghĩa các hàm của riêng mình trong jQuery trước đây, tôi luôn chỉ định nghĩa các hàm trong JavaScript thẳng. – VoidKing

19

Nếu bạn chỉ cần chức năng tiêu chuẩn chỉ ẩn với chế độ hiển thị: được ẩn để giữ bố cục hiện tại, bạn có thể sử dụng chức năng gọi lại của ẩn để thay đổi css trong thẻ. Hide docs in jquery

Một ví dụ:

$('#subs_selection_box').fadeOut('slow', function() { 
     $(this).css({"visibility":"hidden"}); 
     $(this).css({"display":"block"}); 
}); 

này sẽ sử dụng hình ảnh động mát mẻ bình thường để ẩn div, nhưng sau khi kết thúc hoạt hình bạn thiết lập khả năng hiển thị để ẩn và hiển thị để chặn.

Một ví dụ:. http://jsfiddle.net/bTkKG/1/

Tôi biết bạn didnt muốn $ ("# aa") css() giải pháp, nhưng bạn không nói rõ nếu đó là vì chỉ sử dụng css() phương pháp bạn bị mất hoạt hình.

48

Một cách đơn giản hơn để làm điều này là sử dụng phương pháp toggleClass() jQuery

CSS

.newClass{visibility: hidden} 

HTML

<a href="#" class=trigger>Trigger Element </a> 
<div class="hidden_element">Some Content</div> 

JS

$(document).ready(function(){ 
    $(".trigger").click(function(){ 
     $(".hidden_element").toggleClass("newClass"); 
    }); 
}); 
+1

Tôi thích cách tiếp cận này. Nó ít độc lập hơn vì nó yêu cầu bảng định kiểu riêng biệt, nhưng nó giúp giữ tất cả thông tin kiểu trong các bảng định kiểu mà nó phải thuộc về nó. Nếu bạn muốn vô hiệu hóa khả năng hiển thị, bạn có thể thay đổi thẻ css ở một nơi thay vì thay đổi tất cả mã js của bạn. – vaughan

+17

Đối với những người sử dụng bootstrap, lớp này được gọi là vô hình. – user239558