在jQuery中,有.hide()和.show()方法来设置CSS的display: none设置。

是否有一个等效的功能来设置可见性:隐藏设置?

我知道我可以使用.css(),但我更喜欢一些像.hide()这样的函数。谢谢。


当前回答

你可以制作自己的插件。

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。

其他回答

这里是一个实现,它像$.prop(name[,value])或$.attr(name[,value])函数一样工作。如果变量b被填充,可见性将根据其设置,并返回此(允许继续使用其他属性),否则将返回可见性值。

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;

如果你只需要标准的功能hide only与可见性: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()方法你失去了动画。

一个更简单的方法是使用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");
    });
});

它没有内置的,但你可以很容易地编写自己的:

(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.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。