在jQuery中,有.hide()和.show()方法来设置CSS的display: none设置。
是否有一个等效的功能来设置可见性:隐藏设置?
我知道我可以使用.css(),但我更喜欢一些像.hide()这样的函数。谢谢。
在jQuery中,有.hide()和.show()方法来设置CSS的display: none设置。
是否有一个等效的功能来设置可见性:隐藏设置?
我知道我可以使用.css(),但我更喜欢一些像.hide()这样的函数。谢谢。
当前回答
这里是一个实现,它像$.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;
其他回答
这里是一个实现,它像$.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;
你可以制作自己的插件。
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。
一个更简单的方法是使用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();
下面是一个工作示例。
纯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 answer中给出),因为我们在这里使用纯js。
示例如下。