Эквивалент в jQuery.скрыть () для установки видимости: скрыто


в jQuery есть .hide() и .show() методы, которые устанавливают CSS display: none настройка.

есть эквивалентная функция, которая установила бы visibility: hidden настройки?

Я знаю, что могу использовать .css() но я предпочитаю некоторые функции как .hide() или так. Спасибо.

5 301

5 ответов:

вы можете сделать свои собственные плагины.

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.

там не один встроенный, но вы могли бы написать свой собственный довольно легко:

(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();

здесь пример работающего.

еще более простой способ сделать это-использовать jQuery по toggleClass() метод

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

Если вам нужна только стандартная функциональность hide only with visibility: hidden для сохранения текущего макета вы можете использовать функцию обратного вызова hide для изменения css в теге. скрыть документы в jquery

пример :

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

это будет использовать обычную прохладную анимацию, чтобы скрыть div, но после завершения анимации вы установите видимость скрытой и отображения для блокировки.

пример : http://jsfiddle.net/bTkKG/1/

Я знаю, что вы не хотели $("#aa").решение css (), но вы не указали, было ли это потому, что, используя только метод css (), вы теряете анимацию.

чистый 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 из-за того, чтобы удовлетворить свободно интерфейс "desing pattern".

здесь пример работающего.


ниже я также предоставляю крайне не рекомендуется альтернатива, которая, однако, вероятно, более "близка к вопросу" ответ:

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 'each' (дано в @JamesAllardice ответ), потому что мы используем чистый js здесь.

рабочий пример здесь.