나는 진짜 해결책을 찾았다 고 생각한다. 새로운 기능으로 만들었습니다.
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에서 작동하려면 사용자 정의 코드가 필요합니다.