将CSS文本转换为JavaScript对象

我将以下文本作为JavaScript字符串
.myBox {
 display: block; 
 width: 20px; 
 height: 20px;
 background-color: rgb(204,204,204);
 }

我想转换为JavaScript对象

var myBox = {
 'display': 'block','width': '20px','height': '20px';
 'background-color': 'rgb(204,204)';
};

任何想法或已经制作的脚本?

解决方法

这是解析器的开始,可以做你想要的.当然它需要工作,特别是如果你想处理可能提供的任何通用CSS.这假设输入css是按照您提供的方式编写的,第一行是属性名称,最后一行是’}’,依此类推.

如果您不想只处理基本属性,编写复杂的解析器并不是一件容易的事.例如,如果您声明如下内容,该怎么办?

input[type="text"],table > tr:nth-child(2),#link a:hover {
    -webkit-transition: width 2s; /* Safari and Chrome */
}

这是有效的CSS,但是如何从中提取有效的javascript变量名?如何将-webkit-transition转换为有意义的属性名称?整个任务闻起来像是你做错了.我没有在解析器上工作,而是在处理更稳定的解决方案.

顺便说一句,这是您可以从以下开始的代码

var s = '.myBox {\n';
    s += 'display: block;\n';
    s += 'width: 20px;\n';
    s += 'height: 20px;\n';
    s += 'background-color: rgb(204,204);\n';
    s += '}\n';

    // split css by line
    var css_rows = s.split('\n'); 

    // filter out empty elements and strip ';'      
    css_rows = css_rows.filter(function(x){ return x != '' }).map(function(x){ return x.trim().replace(';','') });

    // create object
    var json_name = css_rows[0].trim().replace(/[\.\{\ \#]/g,'');
    eval('var ' + json_name + ' = {};');
    // remove first and last element
    css_rows = css_rows.splice(1,css_rows.length-2)

    for (elem in css_rows)
    {
        var elem_parts = css_rows[elem].split(':');
        var property_name = elem_parts[0].trim().replace('-','');
        var property_value = elem_parts[1].trim();
        eval(json_name + '.' + property_name + ' = "' + property_value + '";');
    }

相关文章

前言 最近项目做完,用户需要兼容IE,于是开展了兼容性的调整工作。边调整边想感叹IE真是个沙雕。。特将...
前言 有些属性不是很常用,但是工作中遇到了,记录一下,方便学习。 1、text-indent text-indent 属性规...
前言 政府网站会遇到公祭日的时候,网站整体颜色变灰的情况。今天正好调了一下。在此把解决方案分享给大...
需求 项目里有个消息中心,当有消息的时候,小铃铛图标可以晃两下,提示当前有信息。 实现过程 书写css...
html代码 css代码 效果图
在一些界面上 , 如果每个icon都去找图片还是相当麻烦的 , 直接使用css画出icon就方便的多了 , 下面两个...