1.问题现象 javascript
在个人项目中原本有一个标签原本是inline元素,可是我把他的display设置成了inline-block,后面就是我有隐藏和显示的切换,结果先隐藏一次,再一次切换到显示就出了问题。
css
效果图以下,咱们
html
当隐藏以后,在切换回来,效果以下图:java
下面是那个自定义那个框里面的小三角的HTML和样式,后面那个日期图标的样式就不看了,基本原理是同样的jquery
<span id="deletSel" class="btnSelect"></span>
下面图正常时候的样式,没有隐藏以后在显示的状况ide
下面图是点击的隐藏以后,在显示的样式,咱们能够看到多了一个display为block的样式,去掉这个样式就正常了函数
从这个能够看出,jQuery会改变元素你所设置的样式。测试
2.解决办法:在你调用show()函数以后,接着调用css()函数设置成你原本要设置的display属性,代码以下:spa
$("#deletSel").show().css("display","inline-block");
3.透过现象看本质。code
我在网上找了一些资料,别人都说,调用了show()函数以后那个display属性会恢复到该标签默认的display属性,而后我测试了,发现不对。
结论 :show()函数通常会回复到你设置的样式的display的属性,例如就算是inline元素,你把他的display设置成block或者inline-block,show()以后仍是这个样式。
代码以下:
<html> <head> <style type="text/css"> .common { display:inline-block; } </style> <!--script type="text/javascript" src="jquery-2.1.1.min.js"></script--> <script type="text/javascript" src="jquery-1.10.2.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("#showq").click(function(){ $("span").show(); }); $("#hiden").click(function(){ $("span").hide(); }); }); </script> </head> <body> <span class="common">相濡以沫,不如相忘于江湖</span> <span class="common">你们好</span> <button id="showq">显示</button> <button id="hiden">隐藏</button> </body> </html>
现象
最开始的状况
调用show()以后的样式,看到他记住了你设置的样式
可是问题出来了,那咱们那个元素设置的display属性为何没有记住了,缘由是你设置了一个position:absolute属性,这个元素浮动起来了,脱离的文档流,show()以后的display属性就是block了,
下面是给这个例子加上position:absolute样式
下图是刚开始正常的样式
下面是调用了show()函数以后的样式。
后面我又研究了float属性,当设置了float属性,show()函数调用以后display也是block,因此咱们之后注意对于脱离了文档流的元素,咱们调用了show()函数以后,再自定义一下display属性。