如何使用 . hide () 、.show () 或.toggle () 来切换元素的可见度 ?
如果元素可见或隐藏, 我如何测试 ?
如何使用 . hide () 、.show () 或.toggle () 来切换元素的可见度 ?
如果元素可见或隐藏, 我如何测试 ?
当前回答
当对 : hidden 选择器在 jquery 中测试元素时,应考虑一个绝对定位元素可以被确认为隐藏,尽管其子元素是可见的。
虽然仔细看一看拼图文件能提供相关资料:
由于以下几个原因可视为隐藏要素:[.]其宽度和高度明确定为0。 [.]
因此,这实际上对框模型和元素的计算样式是有道理的。即使宽度和高度没有被明确设定为0,它们也可以被隐含地设定为0。
以下列实例为例:
控制台. log( $ ('. foo') ) ; // true control. org ($ ('.bar') ) ; / foo { 位置 : 绝对 : left: 10px; 顶层 : ff00; 位置 : 绝对 : 10px; 顶层 : 10px; 宽度 : 20px; 高度 20px; 底层 : 0000ff; } < 上层 src=" https://ajax.gogleapis.com/ahax/libs/jquery/ 2. 1.1/jquery.min.js. > & & lt;/ statict> & & & div>
jquery 3. x 的更新:
与 jquery 3 相比, 所述的行为将改变元素, 如果有任何布局框, 包括宽度为零和(或)高度的布局框, 则将被视为可见的元素 。
3 0.0 - 阿尔法1: jdidfidd with jquery 3. 0.0 - 阿尔法1:
http://jsfiddle.net/pM2q3/7/
同样的javascript代码 将会有这个输出 :
console.log($('.foo').is(':hidden')); // false
console.log($('.bar').is(':hidden')); // false
其他回答
使用类切换,而不是样式编辑.
使用指定用于“ 隐藏” 元素的类是容易的, 也是最有效的方法之一 。 套用“ 隐藏” 的显示样式“ 无” 将比直接编辑该样式更快 。 我在堆叠溢出问题中解释了其中的一些内容, 使两个元素可见/ 隐藏在同一 div 中 。
缩略式最佳做法和优化
Google前端工程师Nicholas zakas在Google科技演讲中,
加速您的 Javascript (Youtube) 速度
您也可以使用普通的笔记本进行此项操作 :
function isRendered(domObj) {
if ((domObj.nodeType != 1) || (domObj == document.body)) {
return true;
}
if (domObj.currentStyle && domObj.currentStyle["display"] != "none" && domObj.currentStyle["visibility"] != "hidden") {
return isRendered(domObj.parentNode);
} else if (window.getComputedStyle) {
var cs = document.defaultView.getComputedStyle(domObj, null);
if (cs.getPropertyValue("display") != "none" && cs.getPropertyValue("visibility") != "hidden") {
return isRendered(domObj.parentNode);
}
}
return false;
}
注:
各地工作 , 嵌套元素为 css 工作, 内嵌样式不需要框架 。
这对我来说是有效的,我用表演和隐藏来使我的 div 隐藏/可见:
if( $(this).css('display') == 'none' ){
/* your code goes here */
} else {
/* alternate logic */
}
要检查是否显示 I 使用 :
if ( !$('#book').is(':visible')) {
alert('#book is not visible')
}
或以下是 sam , 将jquery 选择器保存在一个变量中, 以便在需要它多次时有更好的性能 :
var $book = $('#book')
if(!$book.is(':visible')) {
alert('#book is not visible')
}
if($('#id_element').is(":visible")){
alert('shown');
}else{
alert('hidden');
}