Я верю, что функция .addClass() в jQuery присоединяет класс CSS к текущему выбору, но мне было интересно, могу ли я создать или определить класс CSS в jQuery, а затем прикрепить его?
Создание класса CSS в jQuery
Ответ 1
Собственно, вы можете создать правило CSS, которое повлияет на все элементы на текущей странице. В большинстве браузеров это должно быть просто:
var style = $('<style>body { background: green; }</style>')
$('html > head').append(style);
Это может работать или не работать в IE, однако вместо этого вы можете использовать собственный addRule:
document.styleSheets[0].addRule('body', 'background: green', -1);
Естественно, это не поможет вам создавать css файлы, которые могут использоваться совместно с веб-страницами, но это удобный способ повлиять на стиль большого количества элементов без необходимости повторять их.
Ответ 2
Я не совсем уверен, что вы хотите, но я думаю, что лучшее, что вы можете сделать, это что-то вроде этого:
var someClass = { "width": "100%", "background": "#ffffff" };
$(this).css(someClass);
Обратите внимание, что это фактически не создание класса, но он может сделать то, что вам нужно.
Ответ 3
Здесь что-то создаст класс CSS, который будет доступен везде и применит его к объекту jQuery. Это использует ту же основную технику, что упоминается MooGoo, но сфокусирован на полностью функциональной части кода:
(function() {
var addRule;
if (typeof document.styleSheets != "undefined" && document.styleSheets) {
addRule = function(selector, rule) {
var styleSheets = document.styleSheets, styleSheet;
if (styleSheets && styleSheets.length) {
styleSheet = styleSheets[styleSheets.length - 1];
if (styleSheet.addRule) {
styleSheet.addRule(selector, rule)
} else if (typeof styleSheet.cssText == "string") {
styleSheet.cssText = selector + " {" + rule + "}";
} else if (styleSheet.insertRule && styleSheet.cssRules) {
styleSheet.insertRule(selector + " {" + rule + "}", styleSheet.cssRules.length);
}
}
}
} else {
addRule = function(selector, rule, el, doc) {
el.appendChild(doc.createTextNode(selector + " {" + rule + "}"));
};
}
var createCssClass = function(className, cssProps, doc) {
doc = doc || document;
var head = doc.getElementsByTagName("head")[0];
if (head && addRule) {
var selector = "*." + className;
var ruleBits = [];
for (var i in cssProps) {
if (cssProps.hasOwnProperty(i)) {
ruleBits.push(i + ":" + cssProps[i] + ";");
}
}
var rule = ruleBits.join("");
var styleEl = doc.createElement("style");
styleEl.type = "text/css";
styleEl.media = "screen";
head.appendChild(styleEl);
addRule(selector, rule, styleEl, doc);
styleEl = null;
}
};
jQuery.fn.createAndApplyCssClass = function(className, cssProps) {
createCssClass(className, cssProps, document);
this.addClass(className);
};
})();
$("#someelement").createAndApplyCssClass("test", {
"background-color": "green",
"color" : "white"
});
Ответ 4
С jQuery.Rule вы можете написать такой код, чтобы добавить новое правило CSS:
$.rule('#content ul{ border:1px solid green }').appendTo('style');
Расширение правила:
$.rule('#content ul', 'style').append('background:#FF9');
Удаление всего правила:
$.rule('#content ul', 'style').remove();
Внутри он использует трюк "append stylesheet to head", который упоминал MooGoo.