Não tenho certeza se é isso que você queria. Você queria substituí-lo, o que, como já foi mencionado, é facilmente realizado $('#element').css('display', 'inline').
O que eu procurava era uma solução para REMOVER completamente o estilo embutido. Eu preciso disso para um plug-in que estou escrevendo, onde tenho que definir temporariamente alguns valores CSS embutidos, mas quero removê-los posteriormente; Quero que a folha de estilo retome o controle. Eu poderia fazer isso armazenando todos os seus valores originais e depois colocando-os de volta na linha, mas essa solução me parece muito mais limpa.
Definir o valor de uma propriedade de estilo como uma string vazia - por exemplo $('#mydiv').css('color', '')- remove essa propriedade de um elemento se já tiver sido aplicada diretamente, seja no atributo de estilo HTML, através do .css()método do jQuery ou através da manipulação direta DOM da propriedade de estilo. No entanto, ele não remove um estilo que foi aplicado com uma regra CSS em uma folha de estilo ou <style>elemento.
@ximi - Obrigado cara. Eu estive pensando sobre isso e decidi que não era uma perda de tempo. Pode ser adotado para verificar estilos inline, para os quais atualmente não há suporte no jQuery ( .css('property')fornece o valor, mas não informa se veio de um estilo inline).
Joseph Silber
Cheguei à mesma conclusão de forma independente - a string vazia parece fazer exatamente o que queremos. Não está oficialmente documentado na API, mas espero que continue a funcionar.
Jon z
@Jonz - Ele está documentado oficialmente (embora eu não sei quando ele foi adicionado, eu não me lembro de vê-lo lá quando eu originalmente publicado este). Além disso, acho que o jQuery não está fazendo nada aqui. O styleobjeto nativo parece se comportar da mesma maneira. Eu alterei minha resposta com esta informação.
Joseph Silber
Isso funciona com coisas como família de fontes ou o - atrapalha o regex?
TMH
4
@mosh - Por que você não usa $('#element').css('display', '')?
Joseph Silber
158
.removeAttr("style") para se livrar de toda a etiqueta de estilo ...
.attr("style") para testar o valor e verificar se existe um estilo embutido ...
.attr("style",newValue) para configurá-lo para outra coisa
Isso afetará todos os estilos embutidos, não apenas display.
SLaks
1
sons bom mal dar-lhe uma tentativa e que você saiba, eu nunca usar estilos inline normalmente tão felizes para limpar todos os estilos inline
Haroldo
11
@Slaks bem, isso é o que eu quis dizer com "se livrar de toda a tag estilo";)
Heisenberg
Oi. existe uma maneira de verificar se algum 'estilo' foi aplicado ao ... $ ('*'), de qualquer fonte como um estilo embutido, atribuindo estilo como fonte, b, forte, arquivo css. antes de tentar remover / redefinir qualquer coisa ou simplesmente redefinir todos um tiro?
Milche Patern
Como remover todos os estilos embutidos individualmente não remove o styleatributo (agora vazio) , isso ainda é digno de nota.
Brilliand
26
A maneira mais fácil de remover estilos embutidos (gerados pelo jQuery) seria:
$(this).attr("style","");
O código embutido deve desaparecer e seu objeto deve adaptar o estilo predefinido nos seus arquivos CSS.
@Kobi: Ele está perguntando sobre qualquer estilo embutido.
SLaks
errar o que? Eu provavelmente não entendo alguma coisa. Estou pensando <div style="display:block;">, $('div').hide().
Kobi
3
@Kobi: hideaborda um caso especial de modificação de estilos embutidos. Esta resposta aborda todos os casos. ( hide/showTambém têm uma limitação como dois que dois valores são alternados ou seja None-> bloco ou None-> in-line..)
Joel
@ Joel: hide/ showlembrará o valor antigo displaye o restaurará corretamente.
SLaks
@ Slaks: Legal. Isso deve ter sido adicionado recentemente, como me lembro de ter tido problemas com isso antes.
Joel
12
você pode criar um plugin 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 resposta contém um truque de uma linha muito interessante que é útil mesmo sem jQuery e que muitos desenvolvedores talvez não conheçam - a chamada elem.style.removeProperty('margin-left')será removida apenas margin-leftdo styleatributo (e retornará o valor dessa propriedade). Para o IE6-8 é elem.style.removeAttribute().
22416
9
A maneira preguiçosa (que fará com que futuros designers amaldiçoem seu nome e o matem enquanto dorme):
#myelement {
display: none !important;}
Isenção de responsabilidade: não defendo essa abordagem, mas certamente é o caminho preguiçoso.
ATUALIZAÇÃO:
Eu criei um violino interativo para brincar com os diferentes métodos e seus resultados. Aparentemente, não há muita diferença entre set to empty string, set to faux valuee removeProperty(). Todos eles resultam no mesmo fallback - que é uma regra CSS predefinida ou o valor padrão do navegador.
daí o 'preguiçoso'! Não é possível descobrir qual bit de qual plugin é!
Haroldo
4
Não sei como você define preguiçoso, apenas respondi como faria isso. Parece fazer sentido corrigir o problema onde ele se origina, em vez de corrigir as coisas fora do plug-in. Prevejo bagunças ao fazê-lo dessa maneira.
Josh Stodola
Qual caminho? Se você editar o plug-in, poderá ter problemas após atualizar para a nova versão, que substituirá sua alteração e estragará o layout. Quem se lembrará daqui a um ano ou mais que você fez aquele pequeno ajuste lá? Eu sempre tentar encontrar outra solução de modificar o código-fonte plug-in
Se vocês votarem em algo negativo, por favor, deixe um comentário.
He Nrik
1
Eu acho que você tem os downvotes porque você não respondeu a pergunta : "jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none". Embora seu texto esteja correto, seu código não resolve a questão.
Gone Coding
Resolvi o problema que eu tinha. Tnx.
yodalr
0
$("#element").css({ display: "none" });
No começo, tentei remover o estilo embutido no css, mas ele não funciona e o novo estilo como a exibição: nenhum será substituído. Mas no JQuery funciona assim.
Eu tive um problema semelhante com a propriedade width. Eu não consegui remover o! Important do código, e como ele precisava desse estilo em um novo modelo, adicionei um ID (modalstyling) ao elemento e depois adicionei o seguinte código ao modelo:
<scripttype="text/javascript">
$('#modalstyling').css('width','');//Removal of width !important
$('#modalstyling').width('75%');//Set custom width</script>
Respostas:
Atualização: enquanto a seguinte solução funciona, há um método muito mais fácil. Ver abaixo.
Aqui está o que eu criei, e espero que isso seja útil - para você ou qualquer outra pessoa:
Isso removerá esse estilo embutido.
Não tenho certeza se é isso que você queria. Você queria substituí-lo, o que, como já foi mencionado, é facilmente realizado
$('#element').css('display', 'inline')
.O que eu procurava era uma solução para REMOVER completamente o estilo embutido. Eu preciso disso para um plug-in que estou escrevendo, onde tenho que definir temporariamente alguns valores CSS embutidos, mas quero removê-los posteriormente; Quero que a folha de estilo retome o controle. Eu poderia fazer isso armazenando todos os seus valores originais e depois colocando-os de volta na linha, mas essa solução me parece muito mais limpa.
Aqui está no formato do plugin:
Se você incluir esse plug-in na página antes do seu script, poderá chamar
e isso deve fazer o truque.
Atualização : agora percebi que tudo isso é inútil. Você pode simplesmente configurá-lo para em branco:
e ele será removido automaticamente para você.
Aqui está uma citação dos documentos :
Eu não acho que o jQuery esteja fazendo nenhuma mágica aqui; parece que o
style
objeto faz isso de forma nativa .fonte
.css('property')
fornece o valor, mas não informa se veio de um estilo inline).style
objeto nativo parece se comportar da mesma maneira. Eu alterei minha resposta com esta informação.$('#element').css('display', '')
?.removeAttr("style")
para se livrar de toda a etiqueta de estilo ....attr("style")
para testar o valor e verificar se existe um estilo embutido ....attr("style",newValue)
para configurá-lo para outra coisafonte
display
.style
atributo (agora vazio) , isso ainda é digno de nota.A maneira mais fácil de remover estilos embutidos (gerados pelo jQuery) seria:
O código embutido deve desaparecer e seu objeto deve adaptar o estilo predefinido nos seus arquivos CSS.
Trabalhou para mim!
fonte
Você pode definir o estilo usando o
css
método jQuery :fonte
<div style="display:block;">
,$('div').hide()
.hide
aborda um caso especial de modificação de estilos embutidos. Esta resposta aborda todos os casos. (hide/show
Também têm uma limitação como dois que dois valores são alternados ou seja None-> bloco ou None-> in-line..)hide
/show
lembrará o valor antigodisplay
e o restaurará corretamente.você pode criar um plugin jquery como este:
uso
fonte
elem.style.removeProperty('margin-left')
será removida apenasmargin-left
dostyle
atributo (e retornará o valor dessa propriedade). Para o IE6-8 éelem.style.removeAttribute()
.A maneira preguiçosa (que fará com que futuros designers amaldiçoem seu nome e o matem enquanto dorme):
Isenção de responsabilidade: não defendo essa abordagem, mas certamente é o caminho preguiçoso.
fonte
fonte
fonte
Se você deseja remover uma propriedade dentro de um atributo de estilo - e não apenas configurá-la para outra coisa -, use o
removeProperty()
método:ATUALIZAÇÃO:
Eu criei um violino interativo para brincar com os diferentes métodos e seus resultados. Aparentemente, não há muita diferença entre
set to empty string
,set to faux value
eremoveProperty()
. Todos eles resultam no mesmo fallback - que é uma regra CSS predefinida ou o valor padrão do navegador.fonte
Caso a exibição seja o único parâmetro do seu estilo, você pode executar este comando para remover todo o estilo:
Significa que, se seu elemento tivesse a seguinte aparência:
Agora seu elemento ficará assim:
fonte
Aqui está um filtro seletor inlineStyle que escrevi que se conecta ao jQuery.
No seu caso, você pode usar isso como:
fonte
Altere o plug-in para não aplicar mais o estilo. Isso seria muito melhor do que remover o estilo depois.
fonte
$el.css({ height : '', 'margin-top' : '' });
etc ...
Apenas deixe o segundo param em branco!
fonte
"jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none"
. Embora seu texto esteja correto, seu código não resolve a questão.$("#element").css({ display: "none" });
No começo, tentei remover o estilo embutido no css, mas ele não funciona e o novo estilo como a exibição: nenhum será substituído. Mas no JQuery funciona assim.
fonte
Eu tive um problema semelhante com a propriedade width. Eu não consegui remover o! Important do código, e como ele precisava desse estilo em um novo modelo, adicionei um ID (modalstyling) ao elemento e depois adicionei o seguinte código ao modelo:
fonte