在jQuery中,有.hide()
和.show()
方法设置CSS display: none
设置。
是否存在设置visibility: hidden
设置的等效函数?
我知道我可以使用.css()
,但我更喜欢像.hide()
这样的功能。感谢。
答案 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);
答案 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();
答案 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)
纯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;