.css ()를 사용하여 중요를 적용하는 방법은 무엇입니까?


735

스타일을 적용하는 데 문제가 !important있습니다. 난 노력 했어:

$("#elem").css("width", "100px !important");

이것은 아무것도 하지 않는다 ; 너비 스타일이 적용되지 않습니다. 덮어 쓰지 않고 이러한 스타일을 적용하는 jQuery와 같은 방법이 cssText있습니까? (먼저 스타일 을 구문 분석해야한다는 의미입니다.)

편집 : 스타일 인라인 !important으로 재정의하려는 스타일 의 스타일 시트가 !important있으므로 .width()외부 !important스타일에 의해 재정의 되므로 사용 등이 작동하지 않습니다 .

또한 이전 값을 재정의하는 값 이 계산 되므로 다른 외부 스타일을 만들 수 없습니다.


주목할 점은 이것이 실제로 Chrome에서는 작동하지만 Firefox에서는 작동하지 않는다는 것입니다.
Peter Jaric

이것은 Chrome 17.x 및 Safari 5.1.1에서도 작동하지만 FF 8.0에서는 작동하지 않습니다.
DavidJ

JQuery 1.8.2를 사용하는 Chromium 20.0.x에서 작동하지 않습니다.
Alba Mendez

7
jQuery 버그 # 11173 은 수정 .css!importantjQuery 코어에 관한 것입니다. 버그는 "수정되지 않음"으로 종료되었습니다. 그러나이 버그의 테스트 케이스는이 질문의 테스트 케이스만큼 제한적이지 않았습니다. 테스트 케이스에는 !important대체하려는 인라인 스타일이 없었습니다. 따라서 해당 버그에서 제안 된 해결 방법은이 경우 작동하지 않습니다.
Rory O'Kane

2
의 가능한 중복 CSS 또는 jQuery로 중요한 재정이! -이 하나가 더 높은 나이, 그리고 있지만, 다른 하나의는 깨끗한, 가장 가치있는 대답을 얻었다 투표했다.
Jason C

답변:


603

이 문제는 jQuery가 !important속성을 이해하지 못하기 때문에 발생 하며 규칙을 적용하지 못합니다.

이 문제를 해결하고 다음을 통해 규칙을 참조하여 규칙을 적용 할 수 있습니다 addClass().

.importantRule { width: 100px !important; }

$('#elem').addClass('importantRule');

또는 사용하여 attr():

$('#elem').attr('style', 'width: 100px !important');

후자의 접근 방식은 이전에 설정된 인라인 스타일 규칙을 설정 해제합니다. 주의해서 사용하십시오.

물론 @Nick Craver의 방법이 더 쉽고 현명하다는 좋은 주장이 있습니다.

위의 attr()접근 방식은 원래 style문자열 / 속성 을 유지하기 위해 약간 수정되었으며 주석에서 falko 가 제안한대로 수정되었습니다 .

$('#elem').attr('style', function(i,s) { return (s || '') + 'width: 100px !important;' });

2
나는 당신의 후자의 접근 방식에 기대어 있지만 슬픈 점은 그것을 버릴 수 없기 때문에 아마도 이전 cssText를 파싱해야한다는 것입니다.
mkoryak

1
아, 죄송합니다, 때로는 영어 유머 내 이해를 넘어갑니다 ... :)
Sinan

1
중첩 된 따옴표 ( ' "width : 100px! important"')는 무엇입니까? 그것은 효과가 없었지만 내부 따옴표를 제거하면 효과가있었습니다. 감사!
Peter Jaric

15
스타일이 비어있을 때 작은 수정 : $ ( '# elem'). attr ( 'style', function (i, s) {return (s || '') + 'width : 100px! important;'});
falko

4
파이어 폭스에서 마지막 스 니펫이 'undefinedwidth: 100px !important;'현재 스타일이 비어있을 때 스타일을 설정하므로 @falko의 수정 사항을 추가해야합니다 .
acdcjunior

332

나는 진짜 해결책을 찾았다 고 생각한다. 새로운 기능으로 만들었습니다.

jQuery.style(name, value, priority);

당신은으로 값을 얻을하는 데 사용할 수 있습니다 .style('name')단지 같은 .css('name'),와의 CSSStyleDeclaration을 얻기 .style()도 설정 값을, 그리고 - 능력 '중요'로 우선 순위를 지정할 수 있습니다. 참조 .

데모

var div = $('someDiv');
console.log(div.style('color'));
div.style('color', 'red');
console.log(div.style('color'));
div.style('color', 'blue', 'important');
console.log(div.style('color'));
console.log(div.style().getPropertyPriority('color'));

출력은 다음과 같습니다.

null
red
blue
important

함수

(function($) {    
  if ($.fn.style) {
    return;
  }

  // Escape regex chars with \
  var escape = function(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
  };

  // For those who need them (< IE 9), add support for CSS functions
  var isStyleFuncSupported = !!CSSStyleDeclaration.prototype.getPropertyValue;
  if (!isStyleFuncSupported) {
    CSSStyleDeclaration.prototype.getPropertyValue = function(a) {
      return this.getAttribute(a);
    };
    CSSStyleDeclaration.prototype.setProperty = function(styleName, value, priority) {
      this.setAttribute(styleName, value);
      var priority = typeof priority != 'undefined' ? priority : '';
      if (priority != '') {
        // Add priority manually
        var rule = new RegExp(escape(styleName) + '\\s*:\\s*' + escape(value) +
            '(\\s*;)?', 'gmi');
        this.cssText =
            this.cssText.replace(rule, styleName + ': ' + value + ' !' + priority + ';');
      }
    };
    CSSStyleDeclaration.prototype.removeProperty = function(a) {
      return this.removeAttribute(a);
    };
    CSSStyleDeclaration.prototype.getPropertyPriority = function(styleName) {
      var rule = new RegExp(escape(styleName) + '\\s*:\\s*[^\\s]*\\s*!important(\\s*;)?',
          'gmi');
      return rule.test(this.cssText) ? 'important' : '';
    }
  }

  // The style function
  $.fn.style = function(styleName, value, priority) {
    // DOM node
    var node = this.get(0);
    // Ensure we have a DOM node
    if (typeof node == 'undefined') {
      return this;
    }
    // CSSStyleDeclaration
    var style = this.get(0).style;
    // Getter/Setter
    if (typeof styleName != 'undefined') {
      if (typeof value != 'undefined') {
        // Set style property
        priority = typeof priority != 'undefined' ? priority : '';
        style.setProperty(styleName, value, priority);
        return this;
      } else {
        // Get style property
        return style.getPropertyValue(styleName);
      }
    } else {
      // Get CSSStyleDeclaration
      return style;
    }
  };
})(jQuery);

CSS 값을 읽고 설정하는 방법에 대한 예는 내용을 참조하십시오 . 내 문제는 !important다른 테마 CSS와의 충돌을 피하기 위해 CSS에서 너비를 이미 설정 했지만 jQuery에서 너비를 변경하면 style 속성에 추가되므로 영향을 미치지 않습니다.

적합성

이 기사setProperty 에서는 기능을 사용하여 우선 순위를 설정 하기 위해 IE 9+ 및 기타 모든 브라우저가 지원된다고 말합니다. IE 8을 사용해 보았지만 실패했기 때문에 내 기능에서 지원을 작성했습니다 (위 참조). setProperty를 사용하여 다른 모든 브라우저에서 작동하지만 <IE 9에서 작동하려면 사용자 정의 코드가 필요합니다.


다른 브라우저에서 이것을 테스트 했습니까?
mkoryak

2
몇 년 전에 공개 된 jQuery.important 플러그인 도 있습니다 . 사소한 문제가 하나만있는 프로덕션 환경에서 사용하고 있습니다 (문제 탭 참조)
colllin

14
$ ( '.someclass') .each (function () {this.style.setProperty ( 'border', 'none', 'important');}); stackoverflow.com/questions/11962962/… 더 간단하고 깨끗하며 효율적입니다.

3
이것을 처리하는 유일한 좋은 방법은 직접 스타일 주입이 아닌 클래스를 사용하는 것입니다.
Richard

3
@Richard, 이것을 처리하는 유일한 좋은 방법은 스타일 을 사용 하지 않는!important 것입니다. 최소한 jQuery를 사용하여 변경하려는 것에는 스타일 이 있습니다 . 코드가 !important두 번째 스타일 을 때림으로써 특이성 규칙에 대해 무지한 학생이 코딩 한 페이지 내에서 실행되는 경우 !importants조만간 이들 중 하나에 집중하게됩니다.
Septagram

149

다음 .width()과 같이 직접 너비를 설정할 수 있습니다 .

$("#elem").width(100);

주석 업데이트 : 이 옵션도 있지만 요소의 모든 CSS를 대체하므로 더 실용적인지 확실하지 않습니다.

$('#elem').css('cssText', 'width: 100px !important');

좋아, 예를 들어, 내가 관심있는 것은 중요하게 설정하는 것입니다.
mkoryak

1
또한 나는 내 상황을 더 잘 반영하기 위해 질문을 편집했습니다.. 기본적으로 나는 인라인을 재정의 해야하는 나쁜 것으로 설정된 외부! 중요 너비를 가지고 있습니다. width ()는 이런 이유로 작동하지 않습니다
mkoryak

@mkoryak-다른 비 클래스 옵션으로 업데이트되었으므로 상황에 맞는지 확실하지 않습니다.
Nick Craver

1
그러나 요소에 직접 적용된 다른 스타일보다 우선합니다. stackoverflow.com/a/11723492/491044 가 구현하기 가장 쉬운 방법입니다.
trgraglia

10
$('#elem').css('cssText', $('#elem').css('cssText')+'width: 100px !important');이전 값 으로 연결하여 재정의 방지
Abel Callejo

81
const elem = $("#elem");
elem[0].style.removeAttribute('width');
elem[0].style.setProperty('width', '100px', 'important');

참고 : Chrome을 사용하면 다음과 같은 오류가 반환 될 수 있습니다.

elem [0] .style.removeAttribute는 함수가 아닙니다

문제 해결 .removeProperty과 같은 기능 을 사용하도록 회선 변경elem[0].style.removeProperty('width');


10
이것은 최고의 답변 중 하나입니다. 간단하고 작동합니다. 많은 설명이 필요하지 않습니다. jQuery 선택기를 제외하고는 일반적인 JavaScript입니다. jQuery는 "중요한"기능을 지원하지 않으므로 일반적인 JS를 사용하는 것이
OMA

2
바닐라와 함께 가고 싶다면 var = document.getElementById('elem');elem [0]과 반대로 elem에서 스타일 메소드를 만들고 수행하면됩니다. 건배.
humbolight

3
바닐라 JS에서 removeAttribute가 작동하지 않습니다. 다음을 수행하십시오. var style = document.getElementById('elem'); style.removeProperty('width'); style.setProperty('width, '100px', 'important')
mcoenca

2
에 문제가있었습니다 .removeAttribute. IE 전용 방법 인 것 같습니다 . @mcoenca 의견이 맞습니다. .removeProperty잘 작동합니다. 그것은의 IE9 +에 따라 MSDN
FelipeAls

2
@Dejan, 답변이 늦어 죄송하지만 다음과 같이 작동합니다.elem.next().get(0).style...
RedClover

54

David Thomas의 답변 은을 사용하는 방법을 설명 $('#elem').attr('style', …)하지만이를 사용하면 style속성 에서 이전에 설정 한 스타일이 삭제된다고 경고 합니다. attr()그 문제없이 사용하는 방법은 다음과 같습니다 .

var $elem = $('#elem');
$elem.attr('style', $elem.attr('style') + '; ' + 'width: 100px !important');

기능으로서 :

function addStyleAttribute($element, styleAttribute) {
    $element.attr('style', $element.attr('style') + '; ' + styleAttribute);
}
addStyleAttribute($('#elem'), 'width: 100px !important');

다음은 JS Bin 데모 입니다.


2
addStyleAttribute()jQuery.css() 와 동일한 매개 변수를 사용하도록 수정할 수도 있습니다 . 예를 들어 CSS 속성을 해당 값으로 매핑하는 것을 지원할 수 있습니다. 그렇게하면 기본적으로 버그가 수정되었지만 최적화없이 다시 구현 .css()됩니다 !important.
Rory O'Kane 5

1
너비는 CSS 클래스에서 정의되었으므로 브라우저 창과 내용의 너비를 기반으로 계산 된 값으로 동적으로 재정의해야했습니다.
Chris Rasco

30

다른 답변을 읽고 실험 한 후에 이것이 나에게 효과적입니다.

$(".selector")[0].style.setProperty( 'style', 'value', 'important' );

그러나 IE 8 이하에서는 작동하지 않습니다.


1
그리고 우리는 여전히 IE8 (우리 중 일부, 불행한)을 지원해야하기 때문에 좋지 않습니다.
mkoryak

27

당신은 이것을 할 수 있습니다 :

$("#elem").css("cssText", "width: 100px !important;");

"cssText"를 속성 이름으로 사용하고 CSS에 값으로 추가 할 항목을 사용하십시오.


5
이것의 단점은 무엇 덮어 쓸 것입니다 cssText했다 거기에 전에 - 당신은 정말 자유롭게 사용하지 못할 수 있도록
mkoryak

1
어쨌든 $ ( "# elem"). css ( "cssText", "+ =; width : 100px! important;");
lexa-b

18

두 가지 방법으로이를 달성 할 수 있습니다.

$("#elem").prop("style", "width: 100px !important"); // this is not supported in chrome
$("#elem").attr("style", "width: 100px !important");

실제로, .prop()함수 는 jQuery v1.6에 추가되었으며 Chrome에서 작동합니다 ... 이것은 prop 페이지에서 인용됩니다 : jQuery 1.6 이전에는 .attr()메소드가 일부 속성을 검색 할 때 특성 값을 고려하여 일관성이없는 동작을 유발할 수 있습니다. jQuery 1.6부터이 .prop()메소드는 속성 값을 명시 적으로 검색하는 동안 속성 값을 명시 적으로 검색하는 방법을 제공 .attr()합니다.
Mottie

1
일반적인 솔루션에는 좋지 않습니다. 이것을 사용하여 기존 스타일을 무시할 수 있습니다.
Nirav Zaveri

14

@AramKocharyan의 대답의 복잡성으로 갈 필요가 없으며 스타일 태그를 동적으로 삽입 할 필요가 없습니다.

스타일을 덮어 쓰지만 구문 분석 할 필요가 없습니다. 왜 그런가요?

// Accepts the hyphenated versions (i.e. not 'cssFloat')
function addStyle(element, property, value, important) {
    // Remove previously defined property
    if (element.style.setProperty)
        element.style.setProperty(property, '');
    else
        element.style.setAttribute(property, '');

    // Insert the new style with all the old rules
    element.setAttribute('style', element.style.cssText +
        property + ':' + value + ((important) ? ' !important' : '') + ';');
}

Chrome에서 규칙을 removeProperty()제거하지 않으므로을 (를) 사용할 수 없습니다 !important. Firefox에서는 camelCase 만 허용하므로을 (를)
사용할 수 없습니다 element.style[property] = ''.

jQuery를 사용하면이 작업을 더 짧게 만들 수 있지만이 바닐라 기능은 최신 브라우저, Internet Explorer 8 등에서 실행됩니다.


12

이 문제가 발생한 후 내가 한 일은 다음과 같습니다.

var origStyleContent = jQuery('#logo-example').attr('style');
jQuery('#logo-example').attr('style', origStyleContent + ';width:150px !important');

감사합니다. 사용자 정의 플러그인보다 구현이 훨씬 간단합니다 (다른 인라인 스타일을 잠재적으로 파괴하더라도).
Phrogz 2016 년

9

이 솔루션은 이전 스타일을 재정의하지 않고 필요한 스타일 만 적용합니다.

var heightStyle = "height: 500px !important";
if ($("foo").attr('style')) {
  $("foo").attr('style', heightStyle + $("foo").attr('style').replace(/^height: [-,!,0-9,a-z, A-Z, ]*;/,''));
else {
  $("foo").attr('style', heightStyle);
}

9

그것이 관련성이 없으며 하나의 요소를 다루기 #elem때문에 id를 다른 것으로 변경하고 원하는대로 스타일을 지정할 수 있습니다 ...

$('#elem').attr('id', 'cheaterId');

그리고 당신의 CSS에서 :

#cheaterId { width: 100px;}

9
왜 CSS 클래스를 추가하는 대신 ID를 변경하여 CSS를 적용합니까?
TeKapa

8

css()함수 를 사용하는 대신 함수를 시도하십시오 addClass().

  <script>
  $(document).ready(function() {
    $("#example").addClass("exampleClass");
  });
  </script>

  <style>
  .exampleClass{
    width:100% !important;
    height:100% !important;
  }
  </style>

OP는 재산의 가치가 동적으로 계산되므로 귀하의 답변이 그를 위해 작동하지 않는다고 썼습니다.
Sebastian Zartner

이 솔루션은 저에게 효과적이었습니다. 원래 포스터만큼 정확한 요구 사항이 있다고 생각하지 않지만 css ()가 작동하지 않는 곳에서는 작동합니다.
leekei

2
이것은 실제로 문제에 대한 완벽한 합리적인 해결책입니다 ... 문제는 아닙니다 !
mkoryak

8

이 문제에 대한 가장 쉽고 최상의 해결책은 .css () 또는 .attr () 대신 addClass ()를 사용하는 것입니다.

예를 들면 다음과 같습니다.

$('#elem').addClass('importantClass');

그리고 CSS 파일에서 :

.importantClass {
    width: 100px !important;
}

1
너비는 JavaScript로 계산되므로 문제가 해결되지 않습니다.
Chris


7

이러한 답변은 대부분 구식이며 IE7 지원은 문제가되지 않습니다.

IE11 + 및 모든 최신 브라우저지원 하는 가장 좋은 방법은 다음 같습니다.

const $elem = $("#elem");
$elem[0].style.setProperty('width', '100px', 'important');

또는 원하는 경우이 작업을 수행하는 작은 jQuery 플러그인을 만들 수 있습니다. 이 플러그인 css()은 지원하는 매개 변수에서 jQuery의 자체 메소드 와 밀접하게 일치 합니다.

/**
 * Sets a CSS style on the selected element(s) with !important priority.
 * This supports camelCased CSS style property names and calling with an object 
 * like the jQuery `css()` method. 
 * Unlike jQuery's css() this does NOT work as a getter.
 * 
 * @param {string|Object<string, string>} name
 * @param {string|undefined} value
 */   
jQuery.fn.cssImportant = function(name, value) {
  const $this = this;
  const applyStyles = (n, v) => {
    // Convert style name from camelCase to dashed-case.
    const dashedName = n.replace(/(.)([A-Z])(.)/g, (str, m1, upper, m2) => {
      return m1 + "-" + upper.toLowerCase() + m2;
    }); 
    // Loop over each element in the selector and set the styles.
    $this.each(function(){
      this.style.setProperty(dashedName, v, 'important');
    });
  };
  // If called with the first parameter that is an object,
  // Loop over the entries in the object and apply those styles. 
  if(jQuery.isPlainObject(name)){
    for(const [n, v] of Object.entries(name)){
       applyStyles(n, v);
    }
  } else {
    // Otherwise called with style name and value.
    applyStyles(name, value);
  }
  // This is required for making jQuery plugin calls chainable.
  return $this;
};
// Call the new plugin:
$('#elem').cssImportant('height', '100px');

// Call with an object and camelCased style names:
$('#another').cssImportant({backgroundColor: 'salmon', display: 'block'});

// Call on multiple items:
$('.item, #foo, #bar').cssImportant('color', 'red');

예제 jsfiddle here .


1
이것이 답입니다. 다른 답변을 확인할 필요가 없습니다
Shwet April

6

먼저 이전 스타일을 제거해야합니다. 정규식을 사용하여 제거합니다. 색상을 변경하는 예는 다음과 같습니다.

var SetCssColorImportant = function (jDom, color) {
       var style = jDom.attr('style');
       style = style.replace(/color: .* !important;/g, '');
       jDom.css('cssText', 'color: ' + color + ' !important;' + style); }

3
cssText 메소드가 $selector.css('cssText','margin-bottom: 0 !important')
제대로

6

머리에 스타일을 추가하는 다른 방법 :

$('head').append('<style> #elm{width:150px !important} </style>');

이렇게하면 모든 CSS 파일 뒤에 스타일이 추가되어 다른 CSS 파일보다 우선 순위가 높아 적용됩니다.


6

다음과 같이 보일 수 있습니다.

은닉처

var node = $ ( '. selector') [0];
또는
var node = document.querySelector ( '. selector');

CSS 설정

node.style.setProperty ( 'width', '100px', 'important');

CSS를 제거

node.style.removeProperty ( 'width');
또는
node.style.width = '';

6

나는 그것이 잘 작동하고 다른 CSS를 덮어 쓸 수 있다고 생각합니다 (이 : DOM 요소).

this.setAttribute('style', 'padding:2px !important');


5

이 솔루션은 모든 계산 된 자바 스크립트를 남기고 요소에 중요한 태그를 추가합니다 : 할 수 있습니다 (중요한 태그로 너비를 설정 해야하는 경우 Ex)

$('exampleDiv').css('width', '');
//This will remove the width of the item
var styles = $('exampleDiv').attr('style');
//This will contain all styles in your item
//ex: height:auto; display:block;
styles += 'width: 200px !important;'
//This will add the width to the previous styles
//ex: height:auto; display:block; width: 200px !important;
$('exampleDiv').attr('style', styles);
//This will add all previous styles to your item

4

세 가지 작업 예

비슷한 상황이 있었지만 오랫동안 .closest ()로 어려움을 겪고 나서 .find ()를 사용했습니다.

예제 코드

// Allows contain functions to work, ignores case sensitivity

jQuery.expr[':'].contains = function(obj, index, meta, stack) {
    result = false;
    theList = meta[3].split("','");
    var contents = (obj.textContent || obj.innerText || jQuery(obj).text() || '')
    for (x=0; x<theList.length; x++) {
        if (contents.toLowerCase().indexOf(theList[x].toLowerCase()) >= 0) {
            return true;
        }
    }
    return false;
};

$(document).ready(function() {
    var refreshId = setInterval( function() {
        $("#out:contains('foo', 'test456')").find(".inner").css('width', '50px', 'important');
    }, 1000); // Rescans every 1000 ms
});

대안

$('.inner').each(function () {
    this.style.setProperty('height', '50px', 'important');
});

$('#out').find('.inner').css({ 'height': '50px'});

작업 : http://jsfiddle.net/fx4mbp6c/


나는 당신에게 하향 투표를 아끼지 않을 것이지만, .indexOf()기능을 브라우저 간 호환성이 더 높은 것으로 대체해야합니다 . 대신 .match()또는 .test()대신 사용.indexOf()
Alexander Dixon

var contents = ? 와 일치하는 세미콜론이없는 이유는 무엇 입니까?
피터 Mortensen

3

상황에 따라 적절하지 않을 수도 있지만 이러한 유형의 상황에 CSS 선택기를 사용할 수 있습니다.

예를 들어 .cssText의 3 번째와 6 번째 인스턴스의 너비가 다른 경우 다음과 같이 작성할 수 있습니다.

.cssText:nth-of-type(3), .cssText:nth-of-type(6) {width:100px !important;}

또는:

.container:nth-of-type(3).cssText, .container:nth-of-type(6).cssText {width:100px !important;}

이의 3 번째 및 6 번째 인스턴스와 일치 하지 않습니다.cssText . :nth-of-type()당신이 생각하는 것을하지 않습니다. 설명 은 여기 를 참조 하십시오 .
BoltClock

그럴 수 있지. 나는 링크를 읽었지만 당신의 요점을 이해하지 못했습니다. 다음은 의도 한대로이 작업을 보여주는 바이올린의 jsfiddle.net/d2E4b
팀 절단

2
바이올린에서 일련의 li요소를 다루고 있습니다. 그것들은 모두 같은 엘리먼트 타입으로 li, 셀렉터가 다루는 것입니다. 동일한 부모에서 다른 요소를 혼합 :nth-of-type()하는 경우, 특히 클래스 선택기를 믹스에 추가하면 다르게 작동합니다.
BoltClock

3

추가하지 않고 시도했다고 가정합니다. !important 합니까?

인라인 CSS (JavaScript가 스타일을 추가하는 방법)는 스타일 시트 CSS를 재정의합니다. 스타일 시트 CSS 규칙이있는 경우에도 그럴 것입니다.!important 입니다.

또 다른 질문 (어리석은 질문 일 수도 있지만 질문해야합니다.) : 작업하려는 요소 display:block;또는display:inline-block; 입니까?

CSS에 대한 전문 지식을 알지 못하면 인라인 요소가 항상 예상대로 작동하지는 않습니다.


4
! important가있는 CSS 규칙은 위치에 상관없이 모든 것을 재정의하지만! important가있는 인라인 스타일은! important가있는 스타일 시트 스타일보다 우선합니다. 이것이 내가 겪고있는 문제입니다. 무시하고 싶은! important 스타일 시트 규칙이 있습니다. 또한 공급 해야하는 값은 JS를 통해 계산되어야하므로 스타일 시트 자체를 간단하게 변경할 수 없습니다.
mkoryak

3

setProperty 또는 cssText를 사용하여 추가 할 수 있습니다 !important 사용하여 JavaScript를 사용하여 DOM 요소 .

예 1 :

elem.style.setProperty ("color", "green", "important");

예 2 :

elem.style.cssText='color: red !important;'

2

또한 특정 요소 또는 추가 기능 (예 : Bootstrap)에는 잘 !important작동 하지 않는 특수 클래스 사례가 있거나 다른 해결 방법이 있음을 발견했습니다..addClass/.removeClass 있으므로 해당 요소를 켜거나 꺼야한다는 것을 알았습니다.

예를 들어, <table class="table-hover">행의 색상과 같은 요소를 성공적으로 수정하는 유일한 방법을 사용하는 경우 table-hover클래스를 켜거나 끄는 것입니다.

$(your_element).closest("table").toggleClass("table-hover");

이 해결 방법이 누군가에게 도움이되기를 바랍니다. :)


2

"event"일 때 메뉴 항목의 텍스트 색상을 변경하려고 시도하는 것과 동일한 문제가 발생했습니다. 이 같은 문제가 발생했을 때 가장 좋은 방법은 다음과 같습니다.

첫 번째 단계 : CSS에서 이러한 목적으로 새 클래스를 작성하십시오. 예를 들면 다음과 같습니다.

.colorw{ color: white !important;}

마지막 단계 : 다음과 같이 addClass 메소드를 사용하여이 클래스를 적용하십시오.

$('.menu-item>a').addClass('colorw');

문제 해결됨.


1
내 의견으로는 가장 좋은 대답입니다. 가장 편리한 것.
Siyah

고맙습니다 @Siyah CSS는 많은 ppl로 알려져 있지만 소수의 사람들 만 이해하며 이것은 슬프고 일부 프로그래머가 그것을 싫어하게 만듭니다
JoelBonetR

그러나 js로 CSS 값을 생성하려는 경우 (예 : JS에 정의 된 색상 값)는 아닙니다. 그렇지 않으면 이것은 좋습니다.
Carl Papworth

왜 js에서 색상을 정의하고 싶습니까?
JoelBonetR

2

이에 대한 가장 안전한 해결 방법은 클래스를 추가하고 CSS에서 마법을 :-)하는 것입니다 addClass()removeClass()작업을 수행해야합니다.


1

https://jsfiddle.net/xk6Ut/256/

다른 방법은 JavaScript에서 CSS 클래스를 동적으로 작성하고 업데이트하는 것입니다. 이를 위해서는 스타일 요소를 사용할 수 있으며 CSS 클래스를 업데이트 할 수 있도록 스타일 요소의 ID를 사용해야합니다.

function writeStyles(styleName, cssText) {
    var styleElement = document.getElementById(styleName);
    if (styleElement) document.getElementsByTagName('head')[0].removeChild(
        styleElement);
    styleElement = document.createElement('style');
    styleElement.type = 'text/css';
    styleElement.id = styleName;
    styleElement.innerHTML = cssText;
    document.getElementsByTagName('head')[0].appendChild(styleElement);
}

...

  var cssText = '.testDIV{ height:' + height + 'px !important; }';
  writeStyles('styles_js', cssText)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.