您好我正在尝试将新dom元素与旧版本相同,然后隐藏旧版本,以便新版本替换它:http://jsfiddle.net/jC33F/5/
虽然原始元素有余量:自动jQuery无法检索它。 有没有办法能够确定元素是否有保证金:auto; ?
编辑: 感谢@Vibhu我想出了这个http://jsfiddle.net/jC33F/43/看起来很可怕:D而且我不确定它是否会一直有效。
随意提出更好的建议。
答案 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
编辑:
我发现这个jQuery插件声称它可以从元素中返回margin属性
答案 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);
}
请注意,此解决方案仅适用于左/右边距。