Еквівалент jQuery .hide () для встановлення видимості: приховано


340

У jQuery є .hide()і .show()методи, які встановлюють display: noneналаштування CSS .

Чи існує еквівалентна функція, яка встановила б це visibility: hiddenналаштування?

Я знаю, що можу використовувати, .css()але я віддаю перевагу якійсь функції, подібній .hide()чи тому. Дякую.


2
Ви можете реалізовувати свої власні бази.toggle()
zerkms

Я також прихильник методу jQuery toggleClass () для цього :) jqueryui.com/toggleClass Не соромтеся перевірити приклад, яким я поділився у своїй відповіді нижче stackoverflow.com/a/14632687/1056713
Чая Купер

Відповіді:


426

Ви можете зробити власні плагіни.

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';
    });
};

Якщо ви хочете перевантажити оригінальний jQuery toggle(), який я не рекомендую ...

!(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 Вам доведеться затінити, toggle()що може порушити інші сценарії. Якщо ви хочете, ви можете додати додатковий аргумент , toggle()щоб вказати , слід чи visibilityабо displayповинна бути включена. Однак я просто використала користувальницький у своєму останньому прикладі. :)
alex

Чи можете ви опублікувати приклад того, як підтримувати додаткові параметри show(швидкість, ослаблення, зворотний виклик)?
georg

11
Це чудово, якщо ви дивитесь на це саме так, але є мета. Якщо це з'єднано з іншим сценарієм з (function() { })()подібним або подібним, ASI не запуститься, тому що це виглядає як виклик функції. Спробуйте це , а потім видаліть !.
alex

1
@NoBugs Автоматичне введення напівкрапки Про це я написав тут щоденник .
alex

1
@VishalSakaria Це насправді не чітко визначений термін, наскільки я знаю, тому тут добре його використовувати.
алекс

103

Немає вбудованого, але ви можете написати своє досить легко:

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

Потім ви можете назвати це так:

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

Ось робочий приклад .


1
Добрий момент, просто сила звички. Дякую. +1 до відповіді Алекса!
Джеймс Аллардіс

Просто цікаво, який сенс обгортати ці дві функції в (function($) {...}(jQuery));обгортку? Я ніколи раніше не визначав свої власні функції в jQuery, я завжди просто визначав функції в прямому JavaScript.
VoidKing

2
@VoidKing - Це просто "найкраща практика" для плагінів jQuery згідно з документами. Це дозволяє використовувати $ідентифікатор всередині функції, навіть якщо він посилається на щось інше в батьківській області.
Джеймс Еллардіс

jQuery насправді має вбудований метод toggleClass () для цього :) jqueryui.com/toggleClass Не соромтеся перевірити приклад, про який я поділився у своїй відповіді нижче stackoverflow.com/a/14632687/1056713
Chaya Cooper

55

Ще простіший спосіб зробити це - використовувати метод 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
Мені подобається такий підхід. Він менш автономний, оскільки вимагає окремого таблиці стилів, але він допомагає зберігати всю інформацію про стиль у таблицях стилів, куди він повинен належати. Якщо ви хочете відключити видимість, ви можете змінити тег css в одному місці замість того, щоб змінити весь ваш js-код.
воган

19
Для тих, хто використовує bootstrap, цей клас називається невидимим.
user239558

25

Якщо вам потрібна лише стандартна функціональність приховати лише з видимістю: приховано для збереження поточного макета, ви можете використовувати функцію зворотного дзвінка приховати, щоб змінити css у тезі. Сховати документи в jquery

Приклад :

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

Це використовуватиме звичайну круту анімацію, щоб приховати дів, але після закінчення анімації ви встановите видимість на прихований, а показ - на блокування.

Приклад: http://jsfiddle.net/bTkKG/1/

Я знаю, що ви не хотіли рішення $ ("# aa").


2

Ось одна реалізація, що працює $.prop(name[,value])або $.attr(name[,value])функціонує. Якщо bзмінна заповнена, то видимість встановлюється відповідно до неї і thisповертається (дозволяючи продовжувати інші властивості), інакше вона повертає значення видимості.

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

Приклад:

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

1

Чистий еквівалент JS для 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

Ми використовуємо, return elщоб задовольнити вільний інтерфейс "модель дизайну".

Ось робочий приклад .


Нижче я також надаю ВИСОКУ нерекомендовану альтернативу, яка, мабуть, є більш "близькою до питання" відповідь:

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

звичайно, це не реалізує jQuery "кожен" (вказано у відповіді @JamesAllardice ), оскільки тут ми використовуємо чисті js.

Робочий приклад тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.