Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jQuery中创建CSS类_Javascript_Jquery_Css_Class - Fatal编程技术网

Javascript 在jQuery中创建CSS类

Javascript 在jQuery中创建CSS类,javascript,jquery,css,class,Javascript,Jquery,Css,Class,我相信jQuery中的.addClass()函数会将一个CSS类附加到当前选择中,但我想知道是否可以在jQuery中创建或定义一个CSS类,然后再附加它?我不太确定您想要什么,但我想您最好能做的是这样: var someClass = { "width": "100%", "background": "#ffffff" }; $(this).css(someClass); 请注意,这实际上并不是创建类,但它可能会执行您需要的操作。实际上,您可以创建一个CSS规则,该规则将影响当前页面上的所有元

我相信jQuery中的.addClass()函数会将一个CSS类附加到当前选择中,但我想知道是否可以在jQuery中创建或定义一个CSS类,然后再附加它?

我不太确定您想要什么,但我想您最好能做的是这样:

var someClass = { "width": "100%", "background": "#ffffff" };
$(this).css(someClass);

请注意,这实际上并不是创建类,但它可能会执行您需要的操作。

实际上,您可以创建一个CSS规则,该规则将影响当前页面上的所有元素。在大多数浏览器中,它应该简单到:

var style = $('<style>body { background: green; }</style>')
$('html > head').append(style);

当然,这不会帮助您创建可在网页之间共享的css文件,但它是一种影响大量元素样式的简便方法,而无需对其进行迭代。

以下内容将创建一个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"
});
使用,您可以编写如下代码来附加新的CSS规则:

$.rule('#content ul{ border:1px solid green }').appendTo('style');
扩展规则:

$.rule('#content ul', 'style').append('background:#FF9');
删除整个规则:

$.rule('#content ul', 'style').remove();
未来还有更多


在内部,它使用了“将样式表附加到头部”的技巧。

您所说的“定义类”是什么意思?您想通过JavaScript创建一个全局CSS规则吗?如果是这样的话,你为什么要这样做呢?没错,我只是出于好奇而想知道。可能的复制品没有“CSS类”这样的东西。addClass方法添加一个HTML类。你的意思是“如何创建CSS规则集?”请注意,类在JavaScription中是一个保留字。应该注意,$.rule插件v1.0.2(2013)不再适用于Firefox。
$.rule('#content ul', 'style').remove();