Javascript insertBefore和IE7
首先,我要道歉,我正在处理一个隐藏密码的页面,我希望这足够了,但是如果你想要更多的代码,尽管问吧 我有一个列出事件的网页,每个事件都是一组复杂的元素,都包装在一个相对定位的div中,一个eventRow 添加新事件时,我会找到它应该放置和使用的位置:Javascript insertBefore和IE7,javascript,internet-explorer,internet-explorer-7,Javascript,Internet Explorer,Internet Explorer 7,首先,我要道歉,我正在处理一个隐藏密码的页面,我希望这足够了,但是如果你想要更多的代码,尽管问吧 我有一个列出事件的网页,每个事件都是一组复杂的元素,都包装在一个相对定位的div中,一个eventRow 添加新事件时,我会找到它应该放置和使用的位置: document.getElementById('eventRows').insertBefore(div, document.getElementById('eventRow' + id)); div是新的事件行,id是我要插入的事件的id 这
document.getElementById('eventRows').insertBefore(div, document.getElementById('eventRow' + id));
div是新的事件行,id是我要插入的事件的id
这在Chrome、Safari、Firefox和IE8中非常有效,但在IE7中出现了错误——新的事件行似乎放置正确,但其周围的行没有正确移动,留下了混乱的重叠文本
过了一段时间,我发现这是可以修复的,插入后,使用代码:
$('eventRows').innerHTML = $('eventRows').innerHTML;
所以我几乎解决了它,但我不太高兴,对以下问题有什么想法:
我是不是应该照它看起来的那样做
我应该只在浏览器是IE7时才这样做吗
我应该找一个更好的解决办法吗
非常感谢
Ben.您可以尝试强制重新绘制。我可以想到以下几种方法:
- 你描述的那个
报告可以工作,尽管我从未尝试过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_重画插件:。我肯定还有其他人,我只是不知道他们。玩了很多之后,我选择了以下几点:
function redrawElement(e) {
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) && new Number(RegExp.$1) <= 7) {
e.innerHTML = e.innerHTML
}
}
函数重绘元素(e){
如果(/MSIE(\d+\.\d+)/.test(navigator.userAgent)和new Number(RegExp.$1),我认为您在上面的第一个jQuery示例中缺少了一个结束语)
。这就是这里的情况,还是在您的代码中也是如此?非常正确-为了清晰起见,我删减了代码-我编辑了问题我测试了您的所有建议,所有这些都有效(包括className=className)除了一个例外-我有一个绝对定位复选框(不是唯一的AP div)除非我使用innerHTML=innerHTML,否则它不会出现-那么我应该坚持使用它吗?我应该过滤掉工作的浏览器吗?@Ben我读过AP divs可能是个问题。我记得看到了一个解决方案。让我看看。@Ben你有没有查看过声明的源代码是残忍的(添加然后删除填充)方法将处理绝对定位的节点。如果您尝试过这种方法(可能是带有边距的版本),那么我认为您应该坚持使用innerHTML
方法,但如果您有性能问题,我只会过滤掉工作的浏览器。