मुझे लगता है कि मुझे एक वास्तविक समाधान मिल गया है। मैंने इसे एक नए समारोह में बनाया है:
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
अपने सीएसएस में चौड़ाई के लिए अन्य विषय सीएसएस के साथ टकराव से बचने के लिए सेट कर दिया था , लेकिन मैंने jQuery में चौड़ाई में जो भी बदलाव किए हैं, वे अप्रभावित रहेंगे क्योंकि उन्हें शैली विशेषता में जोड़ा जाएगा।
अनुकूलता
setProperty
फ़ंक्शन का उपयोग करते हुए प्राथमिकता के साथ सेट करने के लिए , यह आलेख कहता है कि IE 9+ और अन्य सभी ब्राउज़रों के लिए समर्थन है। मैंने IE 8 के साथ कोशिश की है और यह विफल रहा है, यही वजह है कि मैंने अपने कार्यों में इसके लिए समर्थन बनाया (ऊपर देखें)। यह सेटप्रॉपर्टी का उपयोग करके अन्य सभी ब्राउज़रों पर काम करेगा, लेकिन इसे <IE 9 में काम करने के लिए मेरे कस्टम कोड की आवश्यकता होगी।