Javascript 将动态CSS注入文档?

Javascript 将动态CSS注入文档?,javascript,jquery,performance,Javascript,Jquery,Performance,向文档中注入动态CSS代码以便在运行时预览所做的更改的最佳方法是什么 我在HTML页面中有一个文本区,我将在其中键入CSS代码。我想从文本区域更新页面的样式。这是我目前使用的方法 <!DOCTYPE html> <html> <head> <title>Dynamic CSS Experiments</title> <meta charset=utf-8 /> <meta name="viewp

向文档中注入动态CSS代码以便在运行时预览所做的更改的最佳方法是什么

我在HTML页面中有一个文本区,我将在其中键入CSS代码。我想从文本区域更新页面的样式。这是我目前使用的方法

<!DOCTYPE html>
<html>
<head>
    <title>Dynamic CSS Experiments</title>
    <meta charset=utf-8 />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
    <style id="dynamic-css" type="text/css"></style>
    <!--[if IE]>
        <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script>
        jQuery(function ($) {
            var styleTag, textArea;
            styleTag = $("#dynamic-css");
            textArea = $("#css-ta");
            textArea.on('keydown', function () {
                styleTag.html(textArea.val())
            });
        });
    </script>
</head>
<body>
    <textarea name="css" id="css-ta" cols="30" rows="10"></textarea>
    ...
</body>
</html>

动态CSS实验
jQuery(函数($){
var-styleTag,textArea;
styleTag=$(“#动态css”);
textArea=$(“#css ta”);
textArea.on('keydown',函数(){
html(textArea.val())
});
});
...
这是最好的方法吗?还有其他聪明的方法吗?

我认为“最好”的方法对每种情况都是独一无二的

根据您的脚本,向keydown事件添加限制可能会很有用,这样可以减少样式更新的数量并提高性能

请参见$.throttle或$.debounce
例如,在执行< < /P> > P>时,考虑jQuery函数:<代码> .Advase>(和代码> >和代码> .ReaveCeLasSe()/代码>,以便动态地应用CSS样式。

< P>一个更改进的版本将是这样的:

    jQuery(function ($) {
        var styleTag, textArea;
        var kI;
        styleTag = $("#dynamic-css");
        textArea = $("#css-ta");
        textArea.on('keyup', function () {
            if (kI !== undefined) {
                 clearTimeout(kI);
            }
            kI = setTimeout(function() {
               styleTag.html(textArea.val());
            },1000);
        });
    });
这会使keyup事件超时(keyup发生在keydown之后,防止有人重复按下某个键),从而在事件发生后触发1s。每次事件发生时,都会重置倒计时。如果倒数运行,您的CSS将更新


这样可以避免对样式块的内容进行过多的重写。

尝试这样的方法来限制更新的次数

<!DOCTYPE html>
<html>
<head>
    <title>Dynamic CSS Experiments</title>
    <meta charset=utf-8/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
    <style id="dynamic-css" type="text/css"></style>
    <!--[if IE]>
        <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script>
        jQuery(function ($) {
            var styleTag, textArea, active=true, threashold=100;
            styleTag = $("#dynamic-css");
            textArea = $("#css-ta");
            textArea.on('keydown', function () {
                if (active===true) {
                    active = false;
                    setTimeout(function(){
                        styleTag.html(textArea.val());
                        active = true;
                    }, threashold);
                }
            });
        });
    </script>
</head>
<body>
<textarea name="css" id="css-ta" cols="30" rows="10"></textarea>
...
</body>
</html>

动态CSS实验
jQuery(函数($){
var styleTag,textArea,active=true,threashold=100;
styleTag=$(“#动态css”);
textArea=$(“#css ta”);
textArea.on('keydown',函数(){
如果(活动===真){
主动=假;
setTimeout(函数(){
html(textArea.val());
主动=真;
},threashold);
}
});
});
...

您所做的非常好,是一种常见的方法。感谢@dda的编辑。更新较大的css文件时是否存在性能问题?jQuery没有内置节流阀(至少内置),您是否将jQuery与下划线混合使用?Muhammed K,当您将新样式应用于文档时,将触发回流事件。更多css更新-更多回流。Benjamin Grunbaum感谢您指出这一点。我添加了一个指向函数实现示例的链接。jQuery有一个debounce插件,可以减少更新次数。在这种情况下是不可能的。这里的课程将被改写。