Tương đương với jQuery. Suede () để đặt mức độ hiển thị: ẩn


340

Trong jQuery, có .hide().show()các phương thức display: nonethiết lập cài đặt CSS .

Có một chức năng tương đương sẽ thiết visibility: hiddenlập cài đặt?

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()thế. Cảm ơn.


2
Bạn có thể tự thực hiện dựa trên.toggle()
zerkms

Tôi cũng là một fan hâm mộ của phương thức toggleClass () của jQuery cho việc này :) jqueryui.com/toggleClass Hãy xem ví dụ tôi đã chia sẻ trong câu trả lời của mình bên dưới stackoverflow.com/a/14632687/1056713
Chaya Cooper

Câu trả lời:


426

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

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 jQuery ban đầu toggle(), 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 .


@Tomas Bạn sẽ phải toggle()theo dõi 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ố phụ toggle()để xác định xem có nên bật visibilityhay displaykhông. Tuy nhiên, tôi chỉ sử dụng một tùy chỉnh trong ví dụ cuối cùng của tôi. :)
alex

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

11
Thật là thừa nếu bạn nhìn theo cách đó, nhưng có một mục đích. Nếu điều này được nối với một tập lệnh khác có (function() { })()hoặc tương tự, ASI sẽ không khởi động bởi vì nó trông giống như một lời gọi hàm. Hãy thử điều này , sau đó loại bỏ !.
alex

1
@NoBugs Tự động chèn dấu hai chấm. Tôi đã viết một bài blog về nó ở đây.
alex

1
@VishalSakaria Nó không thực sự là một thuật ngữ được xác định rõ ràng như tôi biết, vì vậy nó sẽ ổn khi sử dụng nó ở đây.
alex

103

Không có cái nào được tích hợp sẵn nhưng bạn có thể tự viết 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 như vậy:

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

Đây là một ví dụ hoạt động .


1
Điểm tốt, chỉ là một lực lượng của thói quen. Cảm ơn. +1 cho câu trả lời của alex!
James Allardice

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

2
@VoidKing - Đây chỉ là "cách thực hành tốt nhất" cho các plugin jQuery theo các tài liệu. Nó cho phép bạn sử dụng mã $định danh bên trong hàm, ngay cả khi nó đề cập đến một cái gì đó khác trong phạm vi cha.
James Allardice

jQuery thực sự có một phương thức toggleClass () tích hợp cho việc này :) jqueryui.com/toggleClass Hãy xem ví dụ tôi đã chia sẻ trong câu trả lời của mình bên dưới stackoverflow.com/a/14632687/1056713
Chaya Cooper

55

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

CSS

.newClass{visibility: hidden}

HTML

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

Mã não

$(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 khép kín hơn vì nó yêu cầu biểu định kiểu riêng biệt, nhưng nó giúp giữ tất cả thông tin về kiểu dáng trong các bảng định kiểu là nơi cần thuộc về. Nếu bạn muốn tắt 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

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

25

Nếu bạn chỉ cần chức năng tiêu chuẩn của ẩn chỉ với khả năng hiển thị: ẩ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ẻ. Ẩn tài liệu trong jquery

Một ví dụ :

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

Điều này sẽ sử dụng hình động mát mẻ bình thường để ẩn div, nhưng sau khi hoạt hình kết thúc, bạn đặt chế độ hiển thị thành ẩn và hiển thị thành chặn.

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

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


2

Đây là một triển khai, những gì hoạt động như $.prop(name[,value])hoặc $.attr(name[,value])chức năng. Nếu bbiến được điền, mức độ hiển thị được đặt theo đó và thisđược trả về (cho phép tiếp tục với các thuộc tính khác), nếu không, nó sẽ trả về giá trị hiển thị.

jQuery.fn.visible = function (b) {
    if(b === undefined)
        return this.css('visibility')=="visible";
    else {
        this.css('visibility', b? 'visible' : 'hidden');
        return this;
    }
}

Thí dụ:

$("#result").visible(true).on('click',someFunction);
if($("#result").visible())
    do_something;

1

Tương đương với JS thuần cho jQuery hide () / show ():

function hide(el) {
    el.style.visibility = 'hidden';    
    return el;
}

function show(el) {
    el.style.visibility = 'visible';    
    return el;
}

hide(document.querySelector(".test"));
// hide($('.test')[0])   // usage with jQuery

Chúng tôi sử dụng return eldo đáp ứng "mô hình desing" lưu loát .

Dưới đây là ví dụ làm việc .


Dưới đây tôi cũng cung cấp giải pháp thay thế không được đề nghị CAO , tuy nhiên có lẽ câu trả lời "gần với câu hỏi" hơn:

HTMLElement.prototype.hide = function() {
    this.style.visibility = 'hidden';  
    return this;
}

HTMLElement.prototype.show = function() {
    this.style.visibility = 'visible';  
    return this;
}

document.querySelector(".test1").hide();
// $('.test1')[0].hide();   // usage with jQuery

tất nhiên điều này không triển khai jQuery ' every ' (được đưa ra trong câu trả lời @James ALLardice ) vì chúng tôi sử dụng js thuần ở đây.

Ví dụ làm việc là đâ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.