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

嗨,我正在尝试定位新的dom元素与旧的相同,然后隐藏旧的,所以新的将替换它: http : //jsfiddle.net/jC33F/5/

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

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

随意提出更好的建议。

这可能是疯了,但是对于像这样的东西来检查它有一个元素有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个边缘之间的空间的一半。 在这种情况下为我工作,在其他情况下可能会失败。

尝试使用#positionable的绝对位置

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

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

但请注意,如果您未设置任何保证金属性,则仍会将#positionable margin属性设置为auto

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

编辑:

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

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

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

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

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