Hola, estoy tratando de colocar el nuevo elemento dom igual que el anterior, y luego ocultar el antiguo para que lo nuevo lo reemplace: http : //jsfiddle.net/jC33F/5/

Aunque si el elemento original tiene margen: jQuery automático no puede recuperarlo. ¿Hay alguna manera de poder determinar si el elemento tiene margen: auto; ?

Editar: Gracias a @Vibhu se me ocurrió esta http://jsfiddle.net/jC33F/43/ horrible: D Y no estoy seguro de que siempre funcione.

Siéntase libre de sugerir algo mejor.

5
grisevg 7 sep. 2011 a las 00:00

4 respuestas

La mejor respuesta

Esto puede ser una locura, pero ¿qué pasa con algo como esto para verificar que un elemento tiene margin: 0 auto (parece que no puede encontrar otra forma):

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

Este código básicamente verifica si el valor izquierdo de #parent es igual a la mitad del espacio entre los 2 bordes de su contenedor. Funcionó para mí en este caso, podría fallar en otros casos.

2
VNO 6 sep. 2011 a las 21:24

No me gustó ninguna de estas soluciones. Verificar la hoja de estilo real es una solución. Otra solución que se me ocurrió es almacenar los valores izquierdo / derecho, cambiar temporalmente el valor izquierdo y ver si el valor correcto aún coincide. Si no, entonces está configurado en automático.

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

Tenga en cuenta que esta solución es solo para los márgenes izquierdo / derecho.

0
fanfavorite 1 abr. 2016 a las 19:34

Pruébelo con position absolute para #positionable

$("#positionable").css({
    position: 'absolute',
    top: $("#parent").position().top,
    left: $("#parent").position().left,
    margin: $("#parent").css("margin"),
});
0
Simon Arnold 6 sep. 2011 a las 20:58

Compruebe si el margen devuelto está vacío funcionaría, supongo

Sin embargo, tenga en cuenta que si no establece ninguna propiedad de margen, esto seguirá configurando la propiedad de margen #positionable en auto

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

Editar:

Encontré este complemento jQuery que afirma que puede devolver la propiedad de margen de un elemento

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

0
Kemal Fadillah 6 sep. 2011 a las 21:15