আমি মনে করি আমি একটি আসল সমাধান খুঁজে পেয়েছি। আমি এটিকে একটি নতুন ফাংশনে পরিণত করেছি:
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
ফাংশনটি ব্যবহার করে অগ্রাধিকার দিয়ে সেট করার জন্য , এই নিবন্ধটি বলে যে আইই 9+ এবং অন্যান্য সমস্ত ব্রাউজারের জন্য সমর্থন রয়েছে। আমি IE 8 দিয়ে চেষ্টা করেছি এবং এটি ব্যর্থ হয়েছে, এজন্য আমি আমার কার্যাদিতে এটির জন্য সমর্থন তৈরি করেছি (উপরে দেখুন)। এটি সেটপ্রোপার্টি ব্যবহার করে অন্য সমস্ত ব্রাউজারে কাজ করবে তবে <আই 9 তে কাজ করার জন্য আমার কাস্টম কোডটির প্রয়োজন হবে।