I'm trying to implement parsing of CSS in JavaScript so that:
a {   color: red; }   is parsed into the object:
{   'a' {     'color': 'red'   } }   First off, is there a JavaScript / jQuery library I can use?
My implementation is pretty basic, so I'm sure it is not fool-proof by any means. For example, it works fine for basic CSS, but for a property of the type:
background: url(data:image/png;base64, ....);   It fails because I am using split(';') to separate property:value pairs. Here, ; occurs in the value, so it splits at that point too.
Is there an alternate way to do this?
Here is the code:
parseCSS: function(css) {     var rules = {};     css = this.removeComments(css);     var blocks = css.split('}');     blocks.pop();     var len = blocks.length;     for (var i = 0; i < len; i++)     {         var pair = blocks[i].split('{');         rules[$.trim(pair[0])] = this.parseCSSBlock(pair[1]);     }     return rules; },  parseCSSBlock: function(css) {      var rule = {};     var declarations = css.split(';');     declarations.pop();     var len = declarations.length;     for (var i = 0; i < len; i++)     {         var loc = declarations[i].indexOf(':');         var property = $.trim(declarations[i].substring(0, loc));         var value = $.trim(declarations[i].substring(loc + 1));          if (property != "" && value != "")             rule[property] = value;     }     return rule; },  removeComments: function(css) {     return css.replace(/\/\*(\r|\n|.)*\*\//g,""); }   Thanks!
You can easily use the Browser's own CSSOM to parse CSS:
var rulesForCssText = function (styleContent) {     var doc = document.implementation.createHTMLDocument(""),         styleElement = document.createElement("style");     styleElement.textContent = styleContent;     // the style will only be parsed once it is added to a document     doc.body.appendChild(styleElement);      return styleElement.sheet.cssRules; };   For each rule returned you can look at the properties in rule.style. See http://jsfiddle.net/v2JsZ/ for an example.
There is a CSS parser written in Javascript called JSCSSP
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With