Javascript 元素相对位置为don';更新DOM时不移动(IE6和IE7)
我有一张有几个字段集的表格。一个字段集有一个由用户设置的时间首选项表。用户可以添加和删除时间首选项。当他们添加一行时,使用jQueryJavascript 元素相对位置为don';更新DOM时不移动(IE6和IE7),javascript,css,internet-explorer,dom,Javascript,Css,Internet Explorer,Dom,我有一张有几个字段集的表格。一个字段集有一个由用户设置的时间首选项表。用户可以添加和删除时间首选项。当他们添加一行时,使用jQueryappend()将一个表行动态插入DOM 问题在于,在IE6和IE7中,当添加新表行时,页面上任何相对定位的元素都不会“碰撞”。此外,当删除表行时,它们也不会移动。他们只是停留在自己的位置上 这将相对较小,但每个字段集都相对定位,以避免字段集出现IE后台溢出问题。因此,在向表中添加两行或更多行之后,表单的效果非常糟糕 以下是应用于字段集的CSS: form.pan
append()
将一个表行动态插入DOM
问题在于,在IE6和IE7中,当添加新表行时,页面上任何相对定位的元素都不会“碰撞”。此外,当删除表行时,它们也不会移动。他们只是停留在自己的位置上
这将相对较小,但每个字段集都相对定位,以避免字段集出现IE后台溢出问题。因此,在向表中添加两行或更多行之后,表单的效果非常糟糕
以下是应用于字段集的CSS:
form.pancake fieldset {
position: relative;
margin-top: 1.5em;
padding-top: 1.5em;
}
form.pancake fieldset legend {
position: absolute;
top: -0.5em;
left: 0.5em;
}
当从样式表中删除位置:relative
时,动态添加的行可以完美地工作,并且内容可以适当地向下移动
非常感谢您的帮助。是的,说到这一点,IE真的很痛苦。我发现我实际上必须强制它重新绘制DOM元素,以使其移动。我是如何快速隐藏和显示父对象的,在您的情况下,它听起来像是您所在行的父对象。这不是最优雅的解决方案,但它确实起到了作用 在我的例子中,我使用jQuery来完成工作
var forceRedraw = function(obj) {
/// <summary>Forces a redraw of passed objects.</summary>
/// <param name="obj" type="jQuery" optional="false">The object for force the redraw on.</param>
obj = $(obj);
// force IE to redraw the obj
if (jQuery.browser.msie) {
obj.css("display", "none");
obj.css("display", "block");
}
};
var forceRedraw=函数(obj){
///强制重画传递的对象。
///用于强制重画的对象。
obj=$(obj);
//强制IE重新绘制obj
if(jQuery.browser.msie){
对象css(“显示”、“无”);
对象css(“显示”、“块”);
}
};
我最近遇到了同样的问题。我最终发现,只有当我的相对定位元素包含在另一个相对定位元素中时,才会发生这种情况
虽然我无法更改元素本身的定位样式,但我能够从包含元素中删除position:relative,从而解决了问题。这可能是一个很好的替代解决方案,尤其是在一个有大量操作的页面上,这些操作可能会导致元素移动。只需设置className属性:“obj.className=obj.className”,就可以让IE重新绘制。然后,重要的问题是找到要强制重新绘制的元素;它最好是行为不端元素的直接容器,以避免给浏览器太多的工作要做。哎呀,我上一条评论右侧的“className”大写错误(为什么我们不能编辑评论?)非常感谢,Nick Berardi。这为我节省了很多工作这就是我要找的。愚蠢的IE。有时候在IE7中,比如使用
.append
,dom元素就消失了。这会解决它的。