No estoy seguro de que esto sea lo que querías. Querías anularlo, lo cual, como ya se señaló, se hace fácilmente por$('#element').css('display', 'inline') .
Lo que estaba buscando era una solución para ELIMINAR completamente el estilo en línea. Necesito esto para un complemento que estoy escribiendo donde tengo que establecer temporalmente algunos valores CSS en línea, pero quiero eliminarlos más tarde; Quiero que la hoja de estilo recupere el control. Podría hacerlo almacenando todos sus valores originales y luego volviéndolos a poner en línea, pero esta solución me parece mucho más limpia.
Establecer el valor de una propiedad de estilo en una cadena vacía, por ejemplo $('#mydiv').css('color', ''), elimina esa propiedad de un elemento si ya se ha aplicado directamente, ya sea en el atributo de estilo HTML, a través del .css()método de jQuery o mediante la manipulación DOM directa de la propiedad de estilo. Sin embargo, no elimina un estilo que se ha aplicado con una regla CSS en una hoja de estilo o <style>elemento.
@ximi - Gracias hombre. He estado pensando en esto y decidí que no era una pérdida de tiempo. Se podría adoptar para verificar los estilos en línea, para los cuales actualmente no hay soporte para jQuery ( .css('property')le da el valor, pero no le dice si proviene de un estilo en línea).
Joseph Silber
Llegué a la misma conclusión de forma independiente: la cadena vacía parece hacer exactamente lo que queremos. No está oficialmente documentado en la API, pero esperamos que continúe funcionando.
Jon z
@Jonz: está documentado oficialmente (aunque no sé cuándo se agregó; no recuerdo haberlo visto allí cuando publiqué esto originalmente). Además, no creo que jQuery esté haciendo nada aquí. El styleobjeto nativo parece comportarse de la misma manera. Modifiqué mi respuesta con esta información.
Joseph Silber
¿Funciona esto con cosas como font-family, o el - estropea la expresión regular?
TMH
44
@mosh - ¿Por qué no lo usas $('#element').css('display', '')?
Joseph Silber
158
.removeAttr("style") para deshacerse de toda la etiqueta de estilo ...
.attr("style") para probar el valor y ver si existe un estilo en línea ...
.attr("style",newValue) para configurarlo en otra cosa
Esto afectará a todos los estilos en línea, no solo display.
SLaks
1
suena bien, inténtalo y te digo que nunca uso estilos en línea normalmente tan felices de borrar todos los estilos en línea
Haroldo
11
@Slaks bien, eso es lo que quise decir con "deshacerse de toda la etiqueta de estilo";)
heisenberg
Hola. ¿hay alguna manera de verificar si se ha aplicado algún 'estilo' al ... $ ('*'), de cualquier fuente, como un estilo en línea, un atributo de estilo como fuente, b, fuerte, archivo css ... antes de intentar eliminar / restablecer algo o simplemente restablecer todo de una vez?
Milche Patern
Dado que eliminar cada estilo en línea individualmente no elimina el styleatributo (ahora vacío) , esto todavía es digno de mención.
Brilliand
26
La forma más fácil de eliminar estilos en línea (generados por jQuery) sería:
$(this).attr("style","");
El código en línea debería desaparecer y su objeto debería adaptar el estilo predefinido en sus archivos CSS.
@Kobi: hideaborda un caso especial de modificación de estilos en línea. Esta respuesta aborda todos los casos. ( hide/showtambién tiene una limitación como dos, que son dos valores alternados, es decir, ninguno-> bloque o ninguno-> en línea).
Joel
@Joel: hide/ showrecordará el valor anterior displayy lo restaurará correctamente.
SLaks
@SLaks: Genial. Eso debe haberse agregado recientemente, ya que recuerdo haber tenido problemas con eso antes.
Joel
12
puedes crear un complemento jquery como este:
jQuery.fn.removeInlineCss =(function(){var rootStyle = document.documentElement.style;var remover =
rootStyle.removeProperty // modern browser|| rootStyle.removeAttribute // old browser (ie 6-8)returnfunction removeInlineCss(properties){if(properties ==null)returnthis.removeAttr('style');
proporties = properties.split(/\s+/);returnthis.each(function(){for(var i =0; i < proporties.length ; i++)
remover.call(this.style, proporties[i]);});};})();
uso
$(".foo").removeInlineCss();//remove all inline styles
$(".foo").removeInlineCss("display");//remove one inline style
$(".foo").removeInlineCss("color font-size font-weight");//remove several inline styles
Esta respuesta contiene un truco muy ordenado de una línea que es útil incluso sin jQuery y que no muchos desarrolladores pueden saber: las llamadas elem.style.removeProperty('margin-left')se eliminarán solo margin-leftdel styleatributo (y devolverán el valor de esa propiedad). Para IE6-8 es elem.style.removeAttribute().
craigpatik
9
La manera perezosa (que hará que los futuros diseñadores maldigan tu nombre y te asesinen mientras duermes):
#myelement {
display: none !important;}
Descargo de responsabilidad: no defiendo este enfoque, pero sin duda es la manera perezosa.
ACTUALIZACIÓN:
Hice un violín interactivo para jugar con los diferentes métodos y sus resultados. Aparentemente, no hay mucha diferencia entre set to empty string, set to faux valuey removeProperty(). Todos dan como resultado la misma alternativa, que es una regla CSS predeterminada o el valor predeterminado del navegador.
¡De ahí el 'perezoso'! ¡no se puede determinar qué bit de qué plugin es!
Haroldo
44
No sé cómo se define perezoso, solo respondí cómo lo haría. Parece tener sentido solucionar el problema donde se origina en lugar de parchear las cosas fuera del complemento. Preveo desordenes al hacerlo de esa manera.
Josh Stodola
De que manera Si edita el complemento, puede tener problemas después de actualizar a una nueva versión que anulará su cambio y estropeará el diseño. ¿Quién recordará en un año más o menos que hiciste ese pequeño ajuste allí? Siempre trato de encontrar otra solución que no sea modificar el código fuente del complemento
Si ustedes votan en contra de algo, por favor dejen un comentario.
Él Nrik
1
Yo supongo que tienes los downvotes porque no ha respondido a la pregunta planteada : "jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none". Aunque su texto es correcto, su código no resuelve la pregunta.
Gone Coding
Resuelto el problema que tenía. Tnx.
Yodalr
0
$("#element").css({ display: "none" });
Al principio traté de eliminar el estilo en línea en CSS, pero no funciona y el nuevo estilo como pantalla: ninguno se sobrescribirá. Pero en JQuery funciona así.
Tuve un problema similar con la propiedad de ancho. No pude eliminar el! Important del código, y dado que necesitaba este estilo en una nueva plantilla, agregué un Id (modalstyling) al elemento y luego agregué el siguiente código a la plantilla:
<scripttype="text/javascript">
$('#modalstyling').css('width','');//Removal of width !important
$('#modalstyling').width('75%');//Set custom width</script>
Respuestas:
Actualización: mientras la siguiente solución funciona, hay un método mucho más fácil. Vea abajo.
Esto es lo que se me ocurrió, y espero que esto sea útil para usted o para cualquier otra persona:
Esto eliminará ese estilo en línea.
No estoy seguro de que esto sea lo que querías. Querías anularlo, lo cual, como ya se señaló, se hace fácilmente por
$('#element').css('display', 'inline')
.Lo que estaba buscando era una solución para ELIMINAR completamente el estilo en línea. Necesito esto para un complemento que estoy escribiendo donde tengo que establecer temporalmente algunos valores CSS en línea, pero quiero eliminarlos más tarde; Quiero que la hoja de estilo recupere el control. Podría hacerlo almacenando todos sus valores originales y luego volviéndolos a poner en línea, pero esta solución me parece mucho más limpia.
Aquí está en formato de complemento:
Si incluye este complemento en la página anterior a su secuencia de comandos, puede llamar
y eso debería hacer el truco.
Actualización : ahora me di cuenta de que todo esto es inútil. Simplemente puede configurarlo en blanco:
y se eliminará automáticamente por ti.
Aquí hay una cita de los documentos :
No creo que jQuery esté haciendo magia aquí; Parece que el
style
objeto hace esto de forma nativa .fuente
.css('property')
le da el valor, pero no le dice si proviene de un estilo en línea).style
objeto nativo parece comportarse de la misma manera. Modifiqué mi respuesta con esta información.$('#element').css('display', '')
?.removeAttr("style")
para deshacerse de toda la etiqueta de estilo ....attr("style")
para probar el valor y ver si existe un estilo en línea ....attr("style",newValue)
para configurarlo en otra cosafuente
display
.style
atributo (ahora vacío) , esto todavía es digno de mención.La forma más fácil de eliminar estilos en línea (generados por jQuery) sería:
El código en línea debería desaparecer y su objeto debería adaptar el estilo predefinido en sus archivos CSS.
¡Trabajó para mi!
fuente
Puede configurar el estilo utilizando el
css
método de jQuery :fuente
<div style="display:block;">
,$('div').hide()
.hide
aborda un caso especial de modificación de estilos en línea. Esta respuesta aborda todos los casos. (hide/show
también tiene una limitación como dos, que son dos valores alternados, es decir, ninguno-> bloque o ninguno-> en línea).hide
/show
recordará el valor anteriordisplay
y lo restaurará correctamente.puedes crear un complemento jquery como este:
uso
fuente
elem.style.removeProperty('margin-left')
se eliminarán solomargin-left
delstyle
atributo (y devolverán el valor de esa propiedad). Para IE6-8 eselem.style.removeAttribute()
.La manera perezosa (que hará que los futuros diseñadores maldigan tu nombre y te asesinen mientras duermes):
Descargo de responsabilidad: no defiendo este enfoque, pero sin duda es la manera perezosa.
fuente
fuente
fuente
Si desea eliminar una propiedad dentro de un atributo de estilo, no solo establecerla en otra cosa, utilice el
removeProperty()
método:ACTUALIZACIÓN:
Hice un violín interactivo para jugar con los diferentes métodos y sus resultados. Aparentemente, no hay mucha diferencia entre
set to empty string
,set to faux value
yremoveProperty()
. Todos dan como resultado la misma alternativa, que es una regla CSS predeterminada o el valor predeterminado del navegador.fuente
En caso de que la pantalla sea el único parámetro de su estilo, puede ejecutar este comando para eliminar todo el estilo:
Significa que si su elemento se veía así antes:
Ahora su elemento se verá así:
fuente
Aquí hay un filtro selector de inlineStyle que escribí que se conecta a jQuery.
En su caso, podría usar esto como:
fuente
Cambie el complemento para que ya no aplique el estilo. Eso sería mucho mejor que eliminar el estilo posterior.
fuente
$el.css({ height : '', 'margin-top' : '' });
etc ...
¡Solo deja el segundo parámetro en blanco!
fuente
"jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none"
. Aunque su texto es correcto, su código no resuelve la pregunta.$("#element").css({ display: "none" });
Al principio traté de eliminar el estilo en línea en CSS, pero no funciona y el nuevo estilo como pantalla: ninguno se sobrescribirá. Pero en JQuery funciona así.
fuente
Tuve un problema similar con la propiedad de ancho. No pude eliminar el! Important del código, y dado que necesitaba este estilo en una nueva plantilla, agregué un Id (modalstyling) al elemento y luego agregué el siguiente código a la plantilla:
fuente