等效于jQuery .hide()设置可见性:隐藏


340

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

是否有可以设置visibility: hidden设置的等效功能?

我知道我可以使用,.css()但是我喜欢一些类似的功能.hide()。谢谢。


2
您可以根据.toggle()
zerkms 2012年

我也是jQuery的toggleClass()方法的粉丝:) jqueryui.com/toggleClass 随时查看我在我的答案下面分享的示例stackoverflow.com/a/14632687/1056713
Chaya Cooper,

Answers:


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()可以指定是否visibilitydisplay应该进行切换。但是,在上一个示例中,我将只使用自定义的。:)
Alex

您能否发布一个示例,说明如何支持其他参数show(速度,缓动,回调)?
乔治,2012年

11
如果你这样看的话,那是多余的,但是有目的。如果将它与带有(function() { })()或类似符号的另一个脚本串联,则ASI将不会启动,因为它看起来像是函数调用。试试这个,然后删除!
alex 2012年

1
@NoBugs自动分号插入。我在这里写了一篇关于它的博客文章
亚历克斯

1
据我所知,@ VishalSakaria并不是一个明确定义的术语,因此在这里使用它应该可以。
Alex

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为alex的答案!
James Allardice 2012年

只是好奇,将这两个函数(function($) {...}(jQuery));包装在包装器中有什么意义?之前我从未在jQuery中定义过自己的函数,而我一直只是在直接JavaScript中定义过函数。
VoidKing

2
@VoidKing-根据文档,这只是jQuery插件的“最佳实践”。它允许您使用$函数内部的标识符,即使它引用父范围中的其他内容也是如此。
James Allardice

jQuery实际上为此具有内置的toggleClass()方法:) jqueryui.com/toggleClass 随时查看我在下面的答案中共享的示例stackoverflow.com/a/14632687/1056713
Chaya Cooper,

55

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

1
我喜欢这种方法。它不太独立,因为它需要单独的样式表,但有助于将所有样式信息保留在样式表中应属于的位置。如果您想禁用可见性,则可以在一处更改css标记,而不必更改所有js代码。
vaughan 2014年

19
对于使用引导程序的用户,此类称为“不可见”。
user239558 2014年

25

如果您只需要具有可见性的隐藏标准功能:隐藏以保持当前布局,则可以使用隐藏回调函数来更改标记中的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()方法会丢失动画。


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

相当于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由于满足流利的界面 “设计模式”。

这是工作示例


在下面,我还提供了高度推荐的替代方法,但是它可能更“接近问题”了:

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。

工作示例在这里

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.