【发布时间】:2014-04-11 23:01:38
【问题描述】:
jQuery 的 .show 和 .hide 方法看起来检查元素的显示值并尝试恢复它,但这样做是作为内联样式可能对不太具体的样式产生不利影响(例如,改变您还想用 jQuery 显示或隐藏的元素的布局)。
这是一个例子:
标记
<div class="parent altLayout">
<div class="child">hi</div>
</div>
样式
.parent {
height: 40px;
background: #06f;
padding: 30px;
}
.child {
height: 40px;
background: #eef;
}
.altLayout .child {
display: inline;
}
JavaScript
// Uncomment each block to see the effect
// w/o altLayout
/* * /
$('.parent').removeClass('altLayout');
/* */
// remove before hide/show
/* * /
$('.parent').removeClass('altLayout');
$('.child').hide();
$('.child').show();
/* */
// remove after hide/show
/* * /
$('.child').hide();
$('.child').show();
$('.parent').removeClass('altLayout');
/* */
小提琴:http://jsfiddle.net/jinglesthula/ZttLJ/
(这里我粗略地模拟了媒体查询在不同断点处可能发生的情况,该媒体查询将交替应用 .altLayout 涵盖的样式。给出的代码也可能是一个合法的用例,而不是响应式媒体查询。)
据我所知,挥之不去的内联显示样式导致了不一致。我的问题是是否有办法解决这个问题?也许这是 .show/.hide 方法中的一个缺陷,它假定原始计算值可以作为内联样式引入而不影响其他代码。
【问题讨论】:
-
作为旁注,我目前正在使用一个 .hide 类,它只指定 display:none 然后使用 .addClass('hide') 和 .removeClass('hide') 但这似乎一个笨拙的解决方法。
-
已提交错误/功能请求:bugs.jquery.com/ticket/15037
-
看起来有一些解决这个问题的动力:bugs.jquery.com/ticket/15037#comment:3