我有一个包含内容的div,我想更改一个类名以使div可见。我有一个时间间隔,当到期时,它应该更改为display: yes
,它应该出现,但它不工作。如果我设置为在4秒后消失,脚本将正确运行,但当我希望它出现时,它会失败。
var $post = $(".hide");
setInterval(function() {
$post.toggleClass("show");
}, 4000);
.show {
display: yes;
visibility: visible;
}
.hide {
display: none;
visibility: hidden;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="hide">
text
</div>
发布于 2017-06-20 20:49:02
你已经得到了很多重写代码以使其工作的答案,但没有太多关于为什么代码不工作的解释。
首先是简单的部分:display: yes
不是一个东西;display
允许的值包括block
、inline
和none
。(还有几十个其他值,但不是“yes”。)
但是,将"show“类改正为使用display: block
而不是display: yes
本身并不能解决问题:您的div中有"hide”类,并且您需要打开和关闭"show“类(而不删除"hide”类)。因此,两种切换状态是“隐藏”或“显示隐藏”(两个类一起)。
因为"hide“类在CSS中位于"show”类之后,所以它优先于"hide“类,所以当两个类都在同一个元素上时,”hide“类获胜。
有几种不同的方法可以解决这个问题:根本不能使用"show“类,只需打开和关闭"hide”类即可。或者您可以同时切换这两个类:
$post.toggleClass("show hide");
// Or use $post.toggleClass("show").toggleClass("hide"); same thing
由于div的初始状态是" hide“(自身),同时切换show和hide类将意味着下一个状态将是"show”(自身),然后返回"hide“(自身)。
其他几个次要问题:
$post
中捕获了div,但很容易在以后意外地尝试在setInterval
循环中将其引用为$('.hide')
,这并不总是与您想要的元素匹配。display:none
和visibility:hidden
来隐藏该元素。这两种方法中的任何一种都会隐藏元素(尽管方式不完全相同。设置visibility:hidden
将隐藏元素,但仍会在布局中为其留出空间。display:none
会将其从布局中完全删除。在大多数情况下,display:none
就是您想要的。)发布于 2017-06-20 19:48:53
如果你不使用toggleClass
,应该没问题:
var post = $("#text");
setInterval(function(){
post.removeClass("hide");
post.addClass("show");
}, 2000);
.show {
display: inline;
}
.hide {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="text" class="hide">
text
</div>
发布于 2017-06-20 19:49:55
您还需要切换hide
类,如下所示:
var $post = $(".hide");
setInterval(function(){
$post.toggleClass("show");
$post.toggleClass("hide");
}, 1000);
https://stackoverflow.com/questions/44652174
复制相似问题