如何使用Javascript添加CSS规则(如强{颜色:红色})?


当前回答

在现代浏览器中,您可以使用document。adoptedStyleSheets添加CSS。

const sheet = new CSSStyleSheet();
sheet.replace("strong { color: red; }");
document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];

这种方法的一个优点是,您甚至不需要等待<head>元素可用,这可能是早期运行的浏览器扩展代码所关注的问题。

其他回答

这是我在最后一个样式表列表的末尾添加css规则的解决方案:

var css = new function()
{
    function addStyleSheet()
    {
        let head = document.head;
        let style = document.createElement("style");

        head.appendChild(style);
    }

    this.insert = function(rule)
    {
        if(document.styleSheets.length == 0) { addStyleSheet(); }

        let sheet = document.styleSheets[document.styleSheets.length - 1];
        let rules = sheet.rules;

        sheet.insertRule(rule, rules.length);
    }
}

css.insert("body { background-color: red }");

您可以逐个元素添加类或样式属性。

例如:

<a name="myelement" onclick="this.style.color='#FF0';">text</a>

你可以这样做。背景,this.style。字体大小等。你也可以使用同样的方法应用一个样式

this.className='classname';

如果你想在javascript函数中做到这一点,你可以使用getElementByID而不是'this'。

另一种选择是使用JQuery存储元素的内联样式属性,然后附加到它,然后用新值更新元素的样式属性。如下:

function appendCSSToElement(element, CssProperties)
        {
            var existingCSS = $(element).attr("style");

             if(existingCSS == undefined) existingCSS = "";

            $.each(CssProperties, function(key,value)
            {
                existingCSS += " " + key + ": " + value + ";";
            });

            $(element).attr("style", existingCSS);

            return $(element);
        }

然后用新的CSS属性作为对象执行它。

appendCSSToElement("#ElementID", { "color": "white", "background-color": "green", "font-weight": "bold" });

这可能不是最有效的方法(我愿意接受关于如何改进这一点的建议。:)),但它绝对有效。

最短一行 //一个函数: const addCSS =css => document.head.appendChild(document.createElement("style")).innerHTML=css; / /使用方法: addCSS(“身体{背景:红色;}”)

你也可以使用DOM Level 2 CSS接口(MDN):

var sheet = window.document.styleSheets[0];
sheet.insertRule('strong { color: red; }', sheet.cssRules.length);

...除了IE8和更早的版本,它使用了自己略微不同的措辞:

sheet.addRule('strong', 'color: red;', -1);

与createElement-set-innerHTML方法相比,这种方法有一个理论上的优势,因为您不必担心在innerHTML中放入特殊的HTML字符,但实际上样式元素是遗留HTML中的CDATA,而且' < '和' & '很少在样式表中使用。

在开始像这样向它追加内容之前,确实需要一个样式表。这可以是任何现有的活动样式表:外部的、嵌入式的或空的,这都没有关系。如果没有,目前创建它的唯一标准方法是使用createElement。