Chrome/Webkit内联块刷新问题
Chrome/Webkit inline-block refresh problem
我发现的问题如下:
Situation:我有一个具有inline-block
显示的整体div。里面有两个元素,也有一个inline-block
显示。
然后我添加(感谢JavaScript)两个元素之间的<br/>
。第二行转到下一行,这是正常的行为。
bug部分: <br/>
然后被删除(JavaScript再次)和…显示不会改变。看起来整个div的框没有重新计算。最后,我有两个类似的标记,但它们的显示方式不同(这有点问题,不是吗?)
它在Firefox上工作得很好(它似乎是基于webkit的,因为Android浏览器的行为方式相同)。所以我的问题是,有没有一种不使用会改变DOM的方法的解决方案?使用的库是jQuery
这里有一个测试用例。
EDIT:根据duri的建议,我在webkit bugzilla中填写了一个错误报告,它在这里。但我仍然在寻找一个解决方案;)
我发现:从整个div中删除所有子元素,然后添加除BR之外的所有子元素:
function removeBr(){
var ahah=document.getElementById("ahah");
var childs=[],child;
while(child=ahah.firstChild) {
if(!child.tagName||child.tagName.toLowerCase()!=='br')
childs.push(child);
ahah.removeChild(child);
}
for(var i=0;i<childs.length;i++)
ahah.appendChild(childs[i]);
}
http://jsfiddle.net/4yj7U/4/其他变体:
function removeBr(){
var node=$("#ahah")[0];
node.style.display='inline';
$("#ahah").children("br").remove();
setTimeout(function(){node.style.display='';},0);
}
作为一种解决方法,当你想让它们在单独的行上时,你可以将样式设置为display: block
,当你想让它们成为朋友时,你可以将样式恢复为inline-block
。
我已经创建了一个JS提琴的例子
显示修复:
function addBr(){
$('span').css({ display: 'block'});
}
function removeBr(){
$('span').css({ display: 'inline-block'});
}
$("#add").click(addBr);
$("#remove").click(removeBr);
这个bug仍然存在,所以这里有另一个解决方法:http://jsfiddle.net/4yj7U/19/
$("span").css('display', 'none');
setTimeout(function(){
$('span').css('display', 'inline-block');
}, 0);
这使Chrome重新渲染跨度并正确显示它们
相关文章:
- 如何解决Yii中的页面刷新问题
- ASP.NET MVC 3-在ajax调用后,重定向到新页面或生成页面刷新
- 在不刷新整个网格的情况下,向Asp.net网格视图添加新行
- PHP和JS脚本的奇怪问题,在我刷新页面之前第一次失败
- Node.js:每次刷新/访问时都会有新的会话
- JQuery刷新列表效果-淡入淡出问题
- 追加新web组件时出现线程问题
- 用户使用浏览器时SPA中的问题's的后退或刷新功能
- j查询模式窗口,刷新父问题
- 删除导致页面刷新出现问题的查询参数
- 如何在Jquery Mobile 1.4.5中刷新新的Div内容
- AngularJS Nginx的刷新路由问题
- Angular的新问题:它应该放在服务中还是留在控制器中?
- 如何防止在sockjs的每一个页面刷新新的连接
- OpenLayers刷新策略问题
- jqGrid reloadGrid和刷新新的colModel和colNames
- 通过.load()加载内容而不刷新的问题
- 在GitHub的新问题页面的标题文本框中按Ctrl+Enter或Enter创建确认弹出框的用户脚本
- Jquery 刷新新打开的窗口
- PHP重定向后图像不刷新(缓存问题?)