Javascript 检索元素边距(如果为');s';自动';

Javascript 检索元素边距(如果为');s';自动';,javascript,jquery,css,dom,Javascript,Jquery,Css,Dom,您好,我正在尝试将新dom元素定位为与旧元素相同的位置,然后隐藏旧元素,以便新元素可以替换它: 不过,如果原始元素有边距:autojquery无法检索它。 是否有一种方法可以确定元素是否有边距:auto 编辑: 多亏了@Vibhu,我想出了这个看起来很可怕的:D,我不确定它是否会一直起作用 请随意提出更好的建议。尝试使用“绝对位置”进行定位 $("#positionable").css({ position: 'absolute', top: $("#parent").posit

您好,我正在尝试将新dom元素定位为与旧元素相同的位置,然后隐藏旧元素,以便新元素可以替换它:

不过,如果原始元素有边距:autojquery无法检索它。 是否有一种方法可以确定元素是否有边距:auto

编辑: 多亏了@Vibhu,我想出了这个看起来很可怕的:D,我不确定它是否会一直起作用


请随意提出更好的建议。

尝试使用“绝对位置”进行定位

$("#positionable").css({
    position: 'absolute',
    top: $("#parent").position().top,
    left: $("#parent").position().left,
    margin: $("#parent").css("margin"),
});

这可能很疯狂,但是像这样检查元素是否有
边距:0 auto
(似乎找不到其他方法):


这段代码主要检查#parent的左值是否等于其容器两条边之间的一半空间。在这种情况下对我有效,但在其他情况下可能会失败。

检查返回的边距是否为空,我想可以

但是,请注意,如果未设置任何边距属性,这仍会将
#positionable
边距属性设置为
auto

编辑:

我发现这个jQuery插件声称它可以从元素返回margin属性


我不喜欢这些解决方案中的任何一个。检查实际的样式表是一个解决方案。我提出的另一个解决方案是存储左/右值,临时更改左值,然后查看右值是否仍然匹配。如果不是,则设置为自动

var mLeft = el.css('margin-left');
var mRight = el.css('margin-Right');
el.css('margin-left',(parseInt(mLeft)-2)+'px');
var mRightChanged = el.css('margin-Right');
if (mRight != mRightChanged) {
    console.log('read element left/right margins as auto');
    el.css('margin-left','auto');
} else {
    console.log('read element left/right margins as their value');
    el.css('margin-left',mLeft);
}

注意,此解决方案仅适用于左/右页边距。

如果原始(#父)元素居中,我也希望使#可定位元素居中。位置是不可能的:绝对的;并非不可能。您可以将left值设置为50%,然后将margin left值设置为元素宽度的一半。看起来不支持“margin”。虽然两个边距的“marginLeft”都是“0px”:0px;利润率:汽车@格里塞夫:对。对不起,我忘了。不管怎样,请看一下我编辑过的帖子。向你的小提琴表率吐露心声是行不通的。家长边距:0px,但可定位是自动的。我想出了这个看起来很可怕的:D,我不确定它是否会一直工作。
var mLeft = el.css('margin-left');
var mRight = el.css('margin-Right');
el.css('margin-left',(parseInt(mLeft)-2)+'px');
var mRightChanged = el.css('margin-Right');
if (mRight != mRightChanged) {
    console.log('read element left/right margins as auto');
    el.css('margin-left','auto');
} else {
    console.log('read element left/right margins as their value');
    el.css('margin-left',mLeft);
}