jQuery로 인라인 스타일을 제거 할 수 있습니까?


236

jQuery 플러그인이 인라인 스타일 ( display:block)을 적용하고 있습니다. 게으른 느낌으로로 대체하고 싶습니다 display:none.

가장 좋은 방법은 무엇입니까?


79
SO :)
Dave Swersky

15
최선의 길과 게으른 길은 반드시 같을 필요는 없습니다.
Joel

1
최고의 개발자가 게으르다는 주장을 자주 들었습니다 ... blog.codinghorror.com/how-to-be-lazy-dumb-and-successful
kaelle

removeAttr () 또는 .css ()를 사용하여 두 가지 방법으로 달성 할 수 있습니다. codepedia.info/jquery-remove-inline-style
Satinder Singh

답변:


381

업데이트 : 다음 솔루션이 작동하는 동안 훨씬 쉬운 방법이 있습니다. 아래를 참조하십시오.


여기에 내가 생각해 낸 것이 있으며, 이것이 당신이나 다른 사람에게 도움이되기를 바랍니다.

$('#element').attr('style', function(i, style)
{
    return style && style.replace(/display[^;]+;?/g, '');
});

인라인 스타일이 제거됩니다.

이것이 당신이 원하는 것이 확실하지 않습니다. 이미 지적했듯이 쉽게 재정의하고 싶었습니다 $('#element').css('display', 'inline').

내가 찾고있는 것은 인라인 스타일을 완전히 제거하는 솔루션이었습니다. 인라인 CSS 값을 임시로 설정해야하지만 나중에 제거하려는 플러그인에 이것이 필요합니다. 스타일 시트가 제어권을 되찾고 싶습니다. 원래 값을 모두 저장 한 다음 다시 인라인으로 넣어서 할 수 있지만이 솔루션은 훨씬 더 깨끗합니다.


다음은 플러그인 형식입니다.

(function($)
{
    $.fn.removeStyle = function(style)
    {
        var search = new RegExp(style + '[^;]+;?', 'g');

        return this.each(function()
        {
            $(this).attr('style', function(i, style)
            {
                return style && style.replace(search, '');
            });
        });
    };
}(jQuery));

스크립트 전에 페이지에이 플러그인을 포함 시키면

$('#element').removeStyle('display');

그 트릭을해야합니다.


업데이트 : 이제이 모든 것이 쓸데없는 것을 깨달았습니다. 간단히 공백으로 설정할 수 있습니다.

$('#element').css('display', '');

자동으로 제거됩니다.

문서 에서 인용 한 내용은 다음과 같습니다 .

스타일 속성 값을 빈 문자열로 설정하면 (예 : $('#mydiv').css('color', '')HTML 스타일 속성, jQuery의 .css()메소드 또는 스타일 속성의 직접 DOM 조작을 통해) 이미 적용된 요소에서 해당 속성을 제거합니다 . 그러나 스타일 시트 또는 <style>요소 에서 CSS 규칙으로 적용된 스타일은 제거하지 않습니다 .

jQuery가 여기서 마술을하고 있다고 생각하지 않습니다. 객체가 이것을 기본적으로 수행 하는 것 같습니다style .


3
@ximi-고맙습니다. 나는 이것에 대해 생각하고 있었고, 이것이 시간 낭비가 아니라고 결정했습니다. 인라인 스타일을 확인하기 위해 채택 될 수 있습니다. 현재 jQuery에서 지원 .css('property')되지 않습니다 (값을 제공하지만 인라인 스타일인지 여부는 알려주지 않음).
Joseph Silber

나는 독립적으로 동일한 결론에 도달했습니다. 빈 문자열은 우리가 원하는 것을하는 것처럼 보입니다. API에 공식적으로 문서화되어 있지는 않지만 계속 작동 할 것입니다.
Jon z

@Jonz는 - 됩니다 공식적으로 (이 추가 될 때 나도 몰라하지만, 나는 내가 원래이이 게시 할 때 본 기억이없는) 기록. 또한 jQuery가 여기서하는 일이 아니라고 생각합니다. 기본 style객체는 같은 방식으로 동작하는 것 같습니다. 이 정보로 답변을 수정했습니다.
Joseph Silber

이것은 font-family와 같은 것들과 함께 작동합니까, 아니면 정규식을 엉망으로 만드는가?
TMH

4
@mosh-당신은 왜 그냥 사용하지 $('#element').css('display', '')않습니까?
Joseph Silber

158

.removeAttr("style") 전체 스타일 태그를 제거하려면 ...

.attr("style") 값을 테스트하고 인라인 스타일이 있는지 확인하십시오 ...

.attr("style",newValue) 다른 것으로 설정


18
이것은 뿐만 아니라 모든 인라인 스타일에 영향을 미칩니다 display.
SLaks

1
기분이 좋지
Haroldo

11
@Slaks 글쎄, 그게 내가 "전체 스타일 태그를
없애라

안녕하세요. 인라인 스타일과 같은 소스에서 font, b, strong, css file과 같은 스타일을 지정하는 ... $ ( '*')에 일부 '스타일'이 적용되었는지 확인하는 방법이 있습니까? 아무것도 제거 / 재설정하거나 한 번의 모든 샷을 일반 재설정합니까?
Milche Patern

모든 인라인 스타일을 개별적으로 제거해도 (현재 비어 있음) style속성이 제거되지 않으므로 여전히 주목할 가치가 있습니다.
Brilliand

26

jQuery로 생성 된 인라인 스타일을 제거하는 가장 쉬운 방법은 다음과 같습니다.

$(this).attr("style", "");

인라인 코드가 사라지고 객체가 CSS 파일에 미리 정의 된 스타일을 적용해야합니다.

나를 위해 일했다!


13

jQuery의 css메소드를 사용하여 스타일을 설정할 수 있습니다 .

$('something:visible').css('display', 'none');

@ Kobi : 그는 인라인 스타일에 대해 묻고 있습니다.
SLaks

어, 뭐? 아마 이해가 안될 것입니다. 나는 대략 생각하고있다 <div style="display:block;">, $('div').hide().
Kobi

3
@Kobi : hide인라인 스타일을 수정하는 특별한 경우를 해결합니다. 이 답변은 모든 경우를 다룹니다. ( hide/show또한 두 값이 토글되는 두 가지로 제한이 있습니다. 즉 none-> block 또는 none-> inline)
Joel

@Joel : hide/ show은 이전 값을 기억하고 display올바르게 복원합니다.
SLaks

@ SLaks : 멋지다. 전에 문제가 있었던 것을 기억하면서 최근에 추가되었을 것입니다.
Joel

12

다음과 같이 jquery 플러그인을 만들 수 있습니다.

jQuery.fn.removeInlineCss = (function(){
    var rootStyle = document.documentElement.style;
    var remover = 
        rootStyle.removeProperty    // modern browser
        || rootStyle.removeAttribute   // old browser (ie 6-8)
    return function removeInlineCss(properties){
        if(properties == null)
            return this.removeAttr('style');
        proporties = properties.split(/\s+/);
        return this.each(function(){
            for(var i = 0 ; i < proporties.length ; i++)
                remover.call(this.style, proporties[i]);
        });
    };
})();

용법

$(".foo").removeInlineCss(); //remove all inline styles
$(".foo").removeInlineCss("display"); //remove one inline style
$(".foo").removeInlineCss("color font-size font-weight"); //remove several inline styles

1
이 답변에는 jQuery가 없어도 유용하고 많은 개발자가 알지 못하는 매우 깔끔한 한 줄짜리 트릭이 포함되어 있습니다. 호출 elem.style.removeProperty('margin-left')은 속성 margin-left에서 제거 style하고 해당 속성 값을 반환합니다. IE6-8의 경우 elem.style.removeAttribute()입니다.
craigpatik

9

게으른 방법 (미래의 디자이너가 당신의 이름을 저주하고 수면 중에 살해 할 것입니다) :

#myelement 
{
    display: none !important;
}

면책 조항 : 나는이 접근법을 옹호하지는 않지만 확실히 게으른 방법입니다.


2
이것은 나쁜 연습 "지연"의 정신에 있기 때문에 분명히 질문에 대한 가장 좋은 대답입니다. 건배!
ktamlyn

6
$('div[style*=block]').removeAttr('style');

$ ( 'div [style]'). removeAttr ( 'style');은 어떻습니까?
skybondsor

@skybondsor는 원하는대로 블록 요소에 대해서만 제거하지는 않습니다.
antpaw

아 예. 나는 그가 모든 것에서 인라인 스타일을 제거하고 싶다고 생각했습니다.
skybondsor


6

다른 속성으로 설정하지 않고 스타일 속성 내에서 속성 을 제거 하려면 다음 removeProperty()방법 을 사용하십시오 .

document.getElementById('element').style.removeProperty('display');

업데이트 : 다른 방법과 결과로 놀 수
있는 대화 형 바이올린 을 만들었습니다 . 와 set to empty string, 사이에는 큰 차이가 없습니다 . 그것들은 모두 동일한 폴백 (fallback)을 낳습니다. 이것은 미리 제공된 CSS 규칙이거나 브라우저의 기본값입니다.set to faux valueremoveProperty()


5

디스플레이가 스타일의 유일한 매개 변수 인 경우 모든 스타일을 제거하기 위해이 명령을 실행할 수 있습니다.

$('#element').attr('style','');

이전에 요소가 다음과 같았다면

<input id="element" style="display: block;">

이제 요소는 다음과 같습니다.

<input id="element" style="">

3

다음은 jQuery에 연결 하는 inlineStyle 선택기 필터 입니다.

$("div:inlineStyle(display:block)") // will select all divs with an inline style of display: block set

귀하의 경우 다음과 같이 사용할 수 있습니다 :

$("div:inlineStyle(display:block)").hide();

2

더 이상 스타일을 적용하지 않도록 플러그인을 변경하십시오. 그 후에 스타일을 제거하는 것보다 훨씬 낫습니다.


1
따라서 '게으른'! 어떤 플러그인의 비트인지 찾기 위해 논쟁 할 수 없습니다!
Haroldo

4
나는 당신이 게으른 정의 방법을 모르겠어요. 방금 내가 어떻게 할 것인지 대답했습니다. 플러그인 외부에서 패치하는 것과는 반대로 문제가 발생했을 때 문제를 해결하는 것이 합리적입니다. 나는 그렇게 할 때 혼란을 예견합니다.
Josh Stodola

어떤 방법으로? 플러그인을 편집하면 새 버전으로 업데이트 한 후 문제가 발생하여 변경 사항을 무시하고 레이아웃이 엉망이 될 수 있습니다. 1 년 정도면 누가 그 부분을 조금 조정했는지 기억할 것입니까? 나는 항상 플러그인 소스 코드를 수정하는 것 이외의 다른 해결책을 찾으려고 노력한다
Zefiryn

2

$el.css({ height : '', 'margin-top' : '' });

기타...

두 번째 매개 변수를 비워 두십시오!


1
당신이 뭔가 투표를 한 경우 의견을 남겨주세요.
그는 Nrik

1
나는 당신이 질문에 대답하지 않았기 때문에 당신에게 downvotes를 얻었을 것입니다 : "jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none". 텍스트는 정확하지만 코드로 문제를 해결하지 못합니다.
사라 코딩

내가 가진 문제를 해결했습니다. Tnx.
yodalr

0

$("#element").css({ display: "none" });

처음에는 CSS에서 인라인 스타일을 제거하려고 시도했지만 작동하지 않으며 디스플레이와 같은 새로운 스타일이 적용되지 않습니다. 그러나 JQuery에서는 다음과 같이 작동합니다.


0

너비 속성과 비슷한 문제가 있습니다. 코드에서! important를 제거 할 수 없었으며 새로운 템플릿 에서이 스타일이 필요했기 때문에 요소에 ID (modalstyling)를 추가 한 다음 템플릿에 다음 코드를 추가했습니다.

<script type="text/javascript">
    $('#modalstyling').css('width', '');    //Removal of width !important
    $('#modalstyling').width('75%');        //Set custom width
</script>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.