[心得] css不同用法在IE与chrome上的显示差异

楼主: laechan (挥泪斩马云)   2018-12-09 18:47:07
其实只是想闲聊而已,另外不晓得以前有没有人提过。
假设以下 table:
<table border=2>
<tr><td>城市</td><td>区域</td><td>景点</td></tr>
<tr><td>京都</td><td>二条</td><td>二条城,大政奉还的地点。</td></tr>
<tr><td>京都</td><td>五条</td><td>清水寺,有著名的清水舞台。</td><tr>
<tr><td>大阪</td><td>新世界</td><td>通天阁,大阪的地标。</td></tr>
</table>
然后我在页面写了一个 filter 按钮:
function filter_data()
{
fstr=document.getElementById("filter").value;
$("tr").each(function(){
tmp=$(this).text();
if(tmp.indexOf(fstr)>=0)
$(this).css("display","block");
else
$(this).css("display","none");
});
}
上面是很直觉的写法,对每一行 tr 做 foreach,如果该行
有关键字(fstr)就显示,没这个关键字就隐藏。
我实测的结果,在 IE 上可以正常显示,在 chrome 上面则
会显示错误的排版,表格会有对不齐的情况。
后来把上面关键段改成底下就解决:
if(tmp.indexOf(fstr)>=0)
$(this).show();
else
$(this).hide();
再实测的结果,只对原本的 tr 每一列做 display=none,
它在 chrome 是会正常显示的:
if(tmp.indexOf(fstr)>=0);
else
$(this).css("display","none");
但只要有用到 $(this).css("display","block"); 排版就
会不正常。
所以有在怀疑是不是 show() 跟 css("display","block")
存在着潜在差异。
作者: pkro12345 (席龙)   2018-12-09 19:54:00
那是因为display在表格中默认是table-row不是block,如果你把block改成table-row应该就没事了,另外那逻辑有filter的不用理他,没有的再设定css隐藏就好。补充一下<tr>默认是table-row,<td>是table-cell之类的
楼主: laechan (挥泪斩马云)   2018-12-09 20:01:00
因为我最初设计是让使用者可变更关键字后再按一次搜寻若用原本的写法第一次搜寻后会成功,更改关键字后再搜就会排版失败,然后还去找如何只refresh表格的方法也都失败哈感谢,原来有table-row跟table-cell之类的属性..
作者: pkro12345 (席龙)   2018-12-09 20:04:00
你可以试试看将没有fliter的元素添加一个class里面为display:none;,之后每次重新搜寻先把全部的class清掉再添加没有filter的元素class一次。

Links booklink

Contact Us: admin [ a t ] ucptt.com