首先道歉,我处理密码后面的页面,我希望这已经足够了,但如果你想要更多的代码,那就问问吧!
我有一个列出事件的网页,每个事件都是一个复杂的元素集,所有元素都包含在相对定位的div中,即eventRow。
添加新活动时,我会找到它应放置的位置并使用:
document.getElementById('eventRows').insertBefore(div, document.getElementById('eventRow' + id));
div是新的事件行,id是我想要插入的事件的id!
这在Chrome,Safari,Firefox和IE8中完美运行,但在IE7中出错了 - 新的事件行似乎放置正确,但是围绕它的行没有正确地移开,留下了混乱的文字。
过了一会儿,我发现这可以在插入后使用代码修复:
$('eventRows').innerHTML = $('eventRows').innerHTML;
所以我几乎已经解决了,但我对以下问题的想法不是很满意:
我应该这样做,因为它似乎有用吗?
如果浏览器是IE7,我应该这样做吗?
我应该找到更好的解决办法吗?
非常感谢
本。
答案 0 :(得分:1)
您可以尝试强制重绘。我可以想到几种方法:
node.className = node.className
虽然我从未尝试过,但仍然有效。附加文本节点:
function redraw(node) {
var doc = node.ownerDocument;
var text = doc.createTextNode(' ');
node.appendChild(text);
setTimeout(function() {
node.removeChild(text);
},0);
}
添加/删除班级
function redraw(node) {
node.className += ' redraw';
setTimeout(function() {
node.className = node.className.replace(/\sredraw$/, '');
}, 0);
}
此代码未经测试,因为我没有IE7
这些方法也存在于各种库中。对于Ext它是Element.repaint()
。 jquery有一个force_redraw插件:http://plugins.jquery.com/content/forceredraw-102。我确定还有其他人,我只是不知道他们。
答案 1 :(得分:0)
经过多次演奏后,我已经满足以下要求:
function redrawElement(e) {
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) && new Number(RegExp.$1) <= 7) {
e.innerHTML = e.innerHTML
}
}
许多其他想法几乎有效,但并不完全,填充想法曾经工作过一次,但是在超时时引起了一次令人讨厌的跳跃,这似乎没有任何关于性能的问题 - 所以为什么不呢! : - )
感谢您的帮助!!