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

IT技术 javascript jquery css visibility
2021-02-01 22:48:44

在jQuery的,也有.hide().show()其设置方法CSSdisplay: none设置。

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

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

6个回答

你可以制作自己的插件。

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

js小提琴

@VishalSakaria 据我所知,这并不是一个定义明确的术语,所以在这里使用它应该没问题。
2021-03-15 22:48:44
您能否发布一个关于如何支持show(速度、缓动、回调)的附加参数的示例
2021-03-26 22:48:44
如果你这样看就多余了,但这是有目的的。如果这与另一个带有 a(function() { })()或类似内容的脚本连接在一起,ASI 将不会启动,因为它看起来像一个函数调用。试试这个,然后删除!.
2021-03-31 22:48:44
@NoBugs 自动分号插入。在这里写了一篇关于它博客文章
2021-04-02 22:48:44
@Tomas 您必须隐藏toggle()可能会破坏其他脚本的阴影如果需要,您可以添加一个额外的参数toggle()来指定是否visibilitydisplay应该切换。但是,我只会在上一个示例中使用自定义的。:)
2021-04-11 22:48:44

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

(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 对亚历克斯的回答!
2021-03-16 22:48:44
只是好奇,在包装(function($) {...}(jQuery));中包装这两个函数有什么意义?我以前从未在 jQuery 中定义过我自己的函数,我总是直接在 JavaScript 中定义函数。
2021-03-20 22:48:44
jQuery实际上有一个内置的toggleClass()方法:) jqueryui.com/toggleClass 请 随意查看我在下面的答案中分享的示例stackoverflow.com/a/14632687/1056713
2021-03-26 22:48:44
@VoidKing - 根据文档,这只是 jQuery 插件的“最佳实践”。它允许您$在函数内部使用标识符,即使它引用父作用域中的其他内容。
2021-04-09 22:48:44

一个更简单的方法是使用 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");
    });
});
我喜欢这种方法。它不太独立,因为它需要单独的样式表,但它有助于将所有样式信息保存在它应该属于的样式表中。如果您想禁用可见性,您可以在一个地方更改 css 标签,而不是更改所有 js 代码。
2021-03-13 22:48:44
对于那些使用引导程序的人,这个类被称为隐形。
2021-03-26 22:48:44

如果您只需要 hide only with visible: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由于满足流畅的界面“设计模式”。

这是工作示例


下面我还提供了非常不推荐的替代方案,但这可能是更“接近问题”的答案:

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。

工作示例在这里