如果它是'auto',则检索元素边距

时间:2011-09-06 20:00:59

标签: javascript jquery css dom

您好我正在尝试将新dom元素与旧版本相同,然后隐藏旧版本,以便新版本替换它:http://jsfiddle.net/jC33F/5/

虽然原始元素有余量:自动jQuery无法检索它。 有没有办法能够确定元素是否有保证金:auto; ?

编辑: 感谢@Vibhu我想出了这个http://jsfiddle.net/jC33F/43/看起来很可怕:D而且我不确定它是否会一直有效。

随意提出更好的建议。

4 个答案:

答案 0 :(得分:2)

这可能很疯狂,但对于这样的东西来说,检查一个元素有margin: 0 auto(似乎找不到任何其他方式):

var margin = $("#parent").css("margin");
if($('#parent').position().left*2 == ($('#parent').parent().innerWidth() - $('#parent').outerWidth())) {
  margin = "0px auto";
}

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

此代码基本上检查#parent的左值是否等于其容器的2个边缘之间的空间的一半。在这种情况下为我工作,在其他情况下可能会失败。

答案 1 :(得分:0)

尝试使用#positionable

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

答案 2 :(得分:0)

检查返回的保证金是否为空我认为

请注意,如果您没有设置任何保证金属性,这仍然会将#positionable保证金属性设置为auto

http://jsfiddle.net/jC33F/22/

编辑:

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

http://www.bramstein.com/projects/jsizes/

答案 3 :(得分:0)

我不喜欢这些解决方案中的任何一个。检查实际样式表是一种解决方案。我想出的另一个解决方案是存储左/右值,暂时更改左值并查看正确值是否仍然匹配。如果没有,则将其设置为自动。

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);
}

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