[javascript] ! important 스타일 재정의

제목은 그것을 거의 요약합니다.

외부 스타일 시트에는 다음 코드가 있습니다.

td.EvenRow a {
  display: none !important;
}

나는 사용을 시도했다 :

element.style.display = "inline";

element.style.display = "inline !important";

그러나 둘 다 작동하지 않습니다. javascript를 사용하여! important 스타일을 재정의 할 수 있습니까?

차이가 있다면 이것은 greasemonkey 확장을위한 것입니다.



답변

이 작업을 수행하는 유일한 방법은 ‘! important’접미사가있는 새 CSS 선언으로 스타일을 추가하는 것입니다. 이를 수행하는 가장 쉬운 방법은 문서 헤드에 새 <style> 요소를 추가하는 것입니다.

function addNewStyle(newStyle) {
    var styleElement = document.getElementById('styles_js');
    if (!styleElement) {
        styleElement = document.createElement('style');
        styleElement.type = 'text/css';
        styleElement.id = 'styles_js';
        document.getElementsByTagName('head')[0].appendChild(styleElement);
    }
    styleElement.appendChild(document.createTextNode(newStyle));
}

addNewStyle('td.EvenRow a {display:inline !important;}')

위의 방법으로 추가 된 규칙은 (! important 접미사를 사용하는 경우) 이전에 설정된 다른 스타일을 재정의합니다. 접미사를 사용하지 않는 경우 ‘ 특이성 ‘ 과 같은 개념 을 고려해야합니다.


답변

이 작업을 수행하는 데 사용할 수있는 몇 가지 간단한 한 줄짜리가 있습니다.

1) 요소에 “스타일” 속성 을 설정합니다 .

element.setAttribute('style', 'display:inline !important');

또는…

2) 개체 의 cssText속성을 수정 style합니다.

element.style.cssText = 'display:inline !important';

어느 쪽이든 일을 할 것입니다.

===

BTW- !important요소에서 규칙 을 조작하는 데 유용한 도구를 원한다면 “important”라는 jQuery 플러그인을 작성했습니다. http://github.com/premasagar/important


답변

element.stylesetProperty세 번째 매개 변수로 우선 순위를 가질 수 있는 메소드가 있습니다.

element.style.setProperty("display", "inline", "important")

그것은 기존의 IE에서 작동하지 않았다 하지만 현재 브라우저에서 잘해야한다.


답변

@Premasagar의 탁월한 답변을 기반으로 구축되었습니다. 다른 모든 인라인 스타일을 제거하지 않으려면 이것을 사용하십시오.

//accepts the hyphenated versions (i.e. not 'cssFloat')
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] = ''.


답변

방금 발견 한 더 나은 방법 : 선택기를 사용하여 페이지 CSS보다 더 구체적으로 지정하십시오. 오늘만하면됐는데 매력처럼 작동 해요! W3C 사이트에 대한 추가 정보 : http://www.w3.org/TR/CSS2/cascade.html#specificity


답변

DOM 요소 스타일 속성에서 단일 스타일을 업데이트 / 추가하려면이 함수를 사용할 수 있습니다.

function setCssTextStyle(el, style, value) {
  var result = el.style.cssText.match(new RegExp("(?:[;\\s]|^)(" +
      style.replace("-", "\\-") + "\\s*:(.*?)(;|$))")),
    idx;
  if (result) {
    idx = result.index + result[0].indexOf(result[1]);
    el.style.cssText = el.style.cssText.substring(0, idx) +
      style + ": " + value + ";" +
      el.style.cssText.substring(idx + result[1].length);
  } else {
    el.style.cssText += " " + style + ": " + value + ";";
  }
}

style.cssText는 모든 주요 브라우저에서 지원됩니다 .

사용 사례 :

var elem = document.getElementById("elementId");
setCssTextStyle(elem, "margin-top", "10px !important");

데모 링크입니다.


답변

페이지에 CSS를 추가하는 것뿐이라면 스타일리시 애드온을 사용하고 사용자 스크립트 대신 사용자 스타일을 작성하는 것이 좋습니다. 사용자 스타일이 더 효율적이고 적절하기 때문입니다.

사용자 스타일을 만드는 방법에 대한 정보는이 페이지를 참조하십시오.