.css () 함수로 추가 된 스타일을 어떻게 제거 할 수 있습니까?


868

jQuery로 CSS 를 변경 하고 입력 값을 기준으로 추가하는 스타일을 제거하고 싶습니다.

if(color != '000000') $("body").css("background-color", color); else // remove style ?

어떻게해야합니까?
위의 선은 색상 선택기를 사용하여 색상을 선택할 때마다 (예 : 마우스가 색상환 위로 움직일 때) 실행됩니다.

두 번째 참고 : CSS 파일 css("background-color", "none")에서 기본 스타일을 제거하기 때문에이 작업을 수행 할 수 없습니다 . jQuery 에 의해 추가 된 인라인 스타일 을 제거하고 싶습니다 .
background-color



fcuntionality에 따라 addClass / removeClass를 사용해보십시오. 다른 스타일에는 영향을 미치지 않습니다.
Prabhakaran

답변:


1332

속성을 빈 문자열로 변경하면 작업을 수행하는 것처럼 보입니다.

$.css("background-color", "");

4
@baacke 가정 된 "표준"이 굉장히 오래되어 개발 시간을 많이 낭비하는 것은 부끄러운 일입니다. 오래된 소프트웨어를 사용하기로 선택한 회사에 대해서는 동정심이 거의 없으며, 개발을 위해 추가 시간을 소비해야하는 이유를 모르겠습니다.
Andrewb

33
나는 @baacke와 함께해야합니다. 우리 고객은 여전히 ​​IE6 (!!)의 공식 최소 요구 사항을 가지고 있습니다. 문제는 저개발 국가를 포함하여 전 세계에있는 고객입니다. "고객의 고객"은 매우 오래된 컴퓨터를 사용하여 고객과 거래 할 수 있습니다. 따라서 오래된 브라우저는 최소한 최소한 지원되어야합니다. 그렇지 않으면 비즈니스 손실 위험이 있습니다.
user1429080

8
클라이언트를 위해 개발 한 솔루션의 요구 사항을 설정하지 않아도됩니다. 해당 클라이언트가 이전 브라우저에 대한 지원을 원하거나 필요로하는 경우,이를 제공하는 일은 귀하의 업무입니다. 여러분들은 "누가 신경 쓰는지"에 대해 이야기하는 것은 진정한 엔지니어들에게 나쁜 이름을줍니다.
Ed DeGagne

5
@EdDeGagne-이전 버전의 IE 지원을 지속적으로 중단해야합니다. 이렇게하면 코드베이스가 향상되고 방문자가 오래된 IE를 사용하지 않도록 동기를 부여합니다. 어려운 점은 언제 지원을 중단 할 수 있는지 파악하는 것입니다. 방문자 가 많은 Google 웹 사이트에서 기존 IE를 삭제하기로 결정한 경우 웹 사이트 가 올바른 결정이라고 믿을 수 있습니다. 한 회사는 심지어 IE 코드를 유지하는 것보다 이전의 각 IE 사용자에게 최신 컴퓨터를 구입하는 것이 더 많은 돈을 지불한다고 사용자들에게 말했습니다.
janko-m

5
"IE8은 여전히 ​​Windows 7에서도 표준"을 보았을 때 읽기를 중단했습니다.
Capsule

544

허용 된 답변 은 작동하지만 style테스트에서 DOM에 빈 속성을 남깁니다 . 큰 문제는 없지만 모든 것을 제거합니다.

removeAttr( 'style' );

이것은 모든 동적 스타일을 제거하고 스타일 시트 스타일로 돌아 가기를 원한다고 가정합니다.


이것은 좋은 생각이지만 jQuery에는 버그가 있습니다. 제출 된 버그를 참조하십시오. bugs.jquery.com/ticket/9500
Tosh

4
@Tosh 그 버그는 2011
ThinkingStiff

나는 알고 있지만 적어도 버전 1.7에서는 여전히 버그가 있습니다. 나는 1.8을 테스트하지 않았습니다
Tosh

7
스타일 속성의 다른 모든 속성도 제거됩니다. 따라서 현명하게 선택하십시오.
코딩 리듬

1
이것은 영리하다! jquery로 만든 인라인 스타일이 CSS 스타일을 덮어 써야하는 상황에서는 허용되는 답변이 작동하지 않지만이 방법은 모든 상황에서 잘 작동합니다.
Farzad YZ

170

jQuery를 사용하여 CSS 속성을 제거하는 방법에는 여러 가지가 있습니다.

1. CSS 속성을 기본 (초기) 값으로 설정

.css("background-color", "transparent")

MDN의 CSS 속성에 대한 초기 값을 참조하십시오 . 여기서 기본값은 transparent입니다. inherit여러 CSS 속성을 사용 하여 부모로부터 특성을 상속 할 수도 있습니다 . CSS3 / CSS4, 당신은 또한 사용할 수 있습니다 initial, revert또는 unset그러나이 키워드는 제한된 브라우저 지원이있을 수 있습니다.

2. CSS 속성 제거

빈 문자열은 CSS 속성을 제거합니다. 즉

.css("background-color","")

그러나 jQuery .css () documentation에 지정된대로 이것은 속성을 제거하지만 background를 포함한 특정 CSS 속기 속성에 대해 IE8과 호환 문제가 있습니다.

스타일 속성 값을 빈 문자열로 설정하면 (예 : $ ( '# mydiv'). css ( 'color', '')) HTML 스타일에 관계없이 해당 속성이 요소에 이미 적용된 경우 해당 속성을 제거합니다. 속성, jQuery의 .css () 메소드 또는 스타일 속성의 직접적인 DOM 조작을 통해. 그러나 스타일 시트 또는 요소에서 CSS 규칙으로 적용된 스타일은 제거하지 않습니다. 경고 : 주목할만한 예외는 IE 8 이하의 경우 테두리 또는 배경과 같은 속기 속성을 제거하면 스타일 시트 또는 element에 설정된 내용에 관계없이 해당 스타일을 요소에서 완전히 제거한다는 것입니다 .

3. 요소의 전체 스타일 제거

.removeAttr("style")

49

순수한 JavaScript의 방법을 알려주기 위해 순수한 JavaScript로 스타일 속성을 제거하는 방법을 얻었습니다.

var bodyStyle = document.body.style;
if (bodyStyle.removeAttribute)
    bodyStyle.removeAttribute('background-color');
else        
    bodyStyle.removeProperty('background-color');

11
그 사람은 이미 jQuery를 사용하고 있습니다 ... 왜 크로스 브라우저 방법을 다시 구현해야합니까!?!?
billy

32
jquery가 모든 것이 아니기 때문에, 개발자 또는 개발자로서 호환성이 무엇인지, JavaScript와 같은 핵심 언어로 그러한 작업을 수행하는 방법을 알아야한다고 말해야하기 때문에 jquery가 모든 것이 아니기 때문에, 이것은 이미 내 자신의 프레임 워크를 만든 내 이론 일 것입니다 핵심 JavaScript에 대한 나의 지식에서 나는 내 자신의 개념과 사고 방식을 가진 다른 것들을 사용하는 것을 거부합니다 :) 그리고 당신의 (-)에 대한 감사 덕분에 나는 단지 부가 가치가 필요했습니다 :) 그녀는 그녀가 그녀는 알렉스라는 남자가
아닙니다

1
나는 당신이 그것을 사용하지 않으면 document.all을 확인해서는 안된다는 것을 알고 싶습니다. 아마도 다음과 같이 확인해야합니다. if (elm.style.removeProperty) {elm.style.removeProperty (propertyName); } else if (elm.style.removeAttribute) {elm.style.removeAttribute (attributeName); }
Richard

잘 당신은 맞습니다 if (navigator.appName == "Microsoft Internet Explorer") document.body.style.removeAttribute ( 'background-color'); else document.body.style.removeProperty ( 'background-color'); 그리고 다른 한편으로 귀하의 솔루션도 옳습니다 :) 감사합니다
Marwan

9
아니요, 브라우저를 확인하는 대신 해당 기능이 존재하는지 확인해야합니다. MS가 다음 버전의 IE에서 함수 이름을 변경하기로 결정하면 어떻게됩니까? 그런 다음 IE 버전도 확인합니까?
j03w

24

이것은 완전한 태그를 제거합니다 :

  $("body").removeAttr("style");

그것은 거친 해결책이며 완전한 요소의 스타일을 제거하기 때문에 항상 작동하지는 않습니다.
Konstantin Zadiran

19

이 jQuery 함수 중 하나가 작동해야합니다.

$("#element").removeAttr("style");
$("#element").removeAttr("background-color") 

22
하나의 CSS 속성 만 제거하려면 :var cssObject = $('selector').prop('style'); cssObject.removeProperty('background-color');
ilgaar

igaar-귀하의 솔루션이 가장 드 is니다. 나는 "display : none"을 가지고 있지만 남아있는 다른 속성을 가진 테이블 셀 힙에 대해 '.each'루프에 넣었습니다. 그것은 단순히 디스플레이를 제거하고 나머지는 남기지 않고 완벽하게 작동했습니다.
Rob Von Nesselrode

9

그냥 사용 :

$('.tag-class').removeAttr('style');

또는

$('#tag-id').removeAttr('style');

또한 색상뿐만 아니라 인라인으로 추가 된 다른 스타일도 제거합니다.
LongInt

7

어때요?

var myCss = $(element).attr('css');
myCss = myCss.replace('background-color: '+$(element).css('background-color')+';', '');
if(myCss == '') {
  $(element).removeAttr('css');
} else {
  $(element).attr('css', myCss);
}

난이게 좋아! 지정된 속성을 제거하고 다른 것은 없습니다.
Joel

7

내 플러그인 사용 :

$.fn.removeCss=function(all){
        if(all===true){
            $(this).removeAttr('class');
        }
        return $(this).removeAttr('style')
    }

귀하의 경우 다음과 같이 사용하십시오.

$(<mySelector>).removeCss();

또는

$(<mySelector>).removeCss(false);

클래스에 정의 된 CSS도 제거하려면 다음을 수행하십시오.

$(<mySelector>).removeCss(true);

$(this).removeAttr중복되며 this.removeAttr충분해야합니다.
Emile Bergeron

removeAttr 또한 classattr 을 제거 합니까 ? 나는 그렇게 생각하지 않습니다
Abdennour TOUMI

나는 이미 jQuery 요소 인 removeAttr플러그인 내부 에 대해 이야기하고 있다 this. $(this)중복됩니다.
Emile Bergeron

2
아! OK OK .. @EmileBergeron, 이전 jquery는 jQuery 요소에 매핑 thisHTMLElement인스턴스로 제공합니다 ... 아시 다시피, 내 대답은 오래되었습니다 ... 그렇습니다 . ES6에 새로 추가 된 화살표 기능 때문에. ..과 this소용되고 그것으로 대체event.currentTarget
Abdennour TOUMI

1
그럴 수 있지! ;) JS 세계에서 3 살짜리 아이.
Emile Bergeron

7

이 시도:

$('#divID').css({"background":"none"});// remove existing

$('#divID').css({"background":"#bada55"});// add new color here.

감사


"기존 제거"와 관련된 유일한 문제는 하나의 세트가있는 경우 스타일 시트 배경도 무시한다는 것입니다.
Jtbs

6

CSS 스타일을 사용하면 다음을 사용할 수 있습니다.

$("#element").css("background-color","none"); 

그런 다음 다음으로 바꿉니다.

$("#element").css("background-color", color);

CSS 스타일을 사용하지 않고 HTML 요소에 속성이있는 경우 다음을 사용할 수 있습니다.

$("#element").attr("style.background-color",color);

6

2018 년

그것에 대한 기본 API가 있습니다

element.style.removeProperty(propery)


2

CSS 클래스를 제거하려는 스타일을 만들어 보시겠습니까? 이제 다음을 사용할 수 있습니다 .removeClass().. 이것은 또한 다음을 사용할 가능성을 열어줍니다..toggleClass()

클래스가 있으면 제거하고 없으면 클래스를 추가하십시오.

클래스를 추가 / 제거하면 레이아웃 문제를 처리 할 때 특정 스타일이 사라진 이유를 파악하려는 것과 달리 변경 / 문제 해결에 혼동을 줄입니다.


2
let el = document.querySelector(element)
let styles = el.getAttribute('style')

el.setAttribute('style', styles.replace('width: 100%', ''))

1

이것은 다른 솔루션보다 복잡하지만 시나리오에서 더 많은 유연성을 제공 할 수 있습니다.

1) 선택적으로 적용 / 제거하려는 스타일을 격리 (캡슐화)하도록 클래스 정의를 만듭니다. 비어있을 수 있습니다 (이 경우 아마도 있어야합니다).

.myColor {}

2)에 따라이 코드를 사용 http://jsfiddle.net/kdp5V/167/을 에서 이 대답 하여 gilly3 :

function changeCSSRule(styleSelector,property,value) {
    for (var ssIdx = 0; ssIdx < document.styleSheets.length; ssIdx++) {
        var ss = document.styleSheets[ssIdx];
        var rules = ss.cssRules || ss.rules;
        if(rules){
            for (var ruleIdx = 0; ruleIdx < rules.length; ruleIdx++) {
                var rule = rules[ruleIdx];
                if (rule.selectorText == styleSelector) {
                    if(typeof value == 'undefined' || !value){
                        rule.style.removeProperty(property);
                    } else {
                        rule.style.setProperty(property,value);
                    }
                    return; // stops at FIRST occurrence of this styleSelector
                }
            }
        }
    }
}

사용 예 : http://jsfiddle.net/qvkwhtow/

주의 사항 :

  • 광범위하게 테스트되지 않았습니다.
  • 중요 하거나 다른 지시문을 새 값에 포함 할 수 없습니다 . 이러한 기존 지시문은이 조작을 통해 유실됩니다.
  • styleSelector가 처음 발견 된 항목 만 변경합니다. 전체 스타일을 추가하거나 제거하지는 않지만보다 정교한 작업으로 수행 할 수 있습니다.
  • 유효하지 않거나 사용할 수없는 값은 무시되거나 오류가 발생합니다.
  • Chrome (적어도)에서 로컬이 아닌 (사이트 간) CSS 규칙은 document.styleSheets 객체를 통해 노출되지 않으므로 작동하지 않습니다. 이 코드의 "처음 발견 된"동작을 염두에두고 로컬 재정의를 추가하고 조작해야합니다.
  • document.styleSheets는 일반적으로 조작에 특히 친숙하지 않으므로 적극적으로 사용하기를 기대하지 마십시오.

이러한 방식으로 스타일링을 분리하는 것은 CSS를 조작하는 것이 아니더라도 CSS의 모든 것입니다. CSS 규칙을 다루는 것은 jQuery가 아닌 jQuery는 DOM 요소를 다루며 CSS 선택기를 사용하여 수행합니다.


1

웹 개발은 단순하다. 특정 스타일을 제거 할 때 빈 문자열을 사용하는 것이 좋습니다

$(element).style.attr = '  ';

1

이 시도

$(".ClassName").css('color','');
Or 
$("#Idname").css('color','');
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.