相当于jQuery .hide()来设置可见性:隐藏

时间:2012-03-08 08:17:21

标签: javascript jquery css visibility

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

是否存在设置visibility: hidden设置的等效函数?

我知道我可以使用.css(),但我更喜欢像.hide()这样的功能。感谢。

6 个答案:

答案 0 :(得分:397)

你可以制作自己的插件。

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

答案 1 :(得分:97)

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

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

这是working example

答案 2 :(得分:53)

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

答案 3 :(得分:23)

如果您只需要隐藏标准功能,只需隐藏可见性:隐藏以保持当前布局,您可以使用隐藏的回调函数来更改标记中的css。 Hide docs in jquery

一个例子:

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

这将使用普通的酷动画隐藏div,但在动画完成后,您将可见性设置为隐藏并显示为阻止。

示例:http://jsfiddle.net/bTkKG/1/

我知道你不想要$(“#aa”)。css()解决方案,但你没有指明是否因为只使用css()方法而丢失动画。

答案 4 :(得分:1)

jQuery hide()/ show()的

纯JS 等效:

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是为了满足fluent interface的“设计模式”。

这里是working example


下面,我还提供了 HIGHLY unrecommended 替代方案,不过,该替代方案可能更“接近问题”:

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。

工作示例为here

答案 5 :(得分:0)

这是一个实现,类似于$.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;