30-讨论
2.7.3 讨论
警告
从jQuery 1.3.2开始,这些过滤器有了显著的变化。在1.3.2之前,两个过滤器的反应类似于你对CSS
visibility属性所期望的功能,但是现在已经不再考虑这些。相反,jQuery测试正在讨论的元素的高度和宽度(与其offsetParent相对)。如果任何一个维度为0,就认为该元素是隐藏的;否则,该元素是可见的。
如果需要更多的控制,可以始终使用jQuery的 filter() 方法,该方法允许以任何方式测试元素。例如,你可能想要选择设置为 display:none 的所有元素,而不是那些设置为 visibility:hidden 的元素。使用 :hidden 过滤器是没有效果的,因为它匹配具有这几种特征之一的元素(1.3.2以前版本)或者完全不考虑这两个属性(1.3.2及以后版本):
jQuery('*').filter(function(){
return jQuery(this).css('display') === 'none'
&& jQuery(this).css('visibility') !== 'hidden';
});
上述的代码应该留给你一组设置了display:none但是没有设置visibility:hidden的元素。注意,这样的选择通常没有必要——:hidden过滤器适用于大部分情况。