Estoy tratando de poner en práctica el análisis de la CSS en JavaScript de forma que:de análisis de CSS en JavaScript/jQuery
a {
color: red;
}
se analiza en el objeto:
{
'a' {
'color': 'red'
}
}
En primer lugar, ¿existe un JavaScript/jQuery biblioteca Puedo usar?
Mi implementación es bastante básica, así que estoy seguro de que no es infalible de ninguna manera. Por ejemplo, funciona bien para CSS básico, pero para una propiedad del tipo:
background: url(data:image/png;base64, ....);
Fracasa porque estoy utilizando split(';')
para separar property:value
pares. Aquí, ;
aparece en el value
, por lo que se divide en ese punto también.
¿Hay alguna otra manera de hacerlo?
Aquí está el código:
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,"");
}
Gracias!
¿Por qué quieres hacer eso? Qué estás intentando lograr. Tal vez haya otra forma (más simple) de resolver su problema –
azul analizado en rojo ?!:) –
@Pablo He intentado pensar en formas alternativas por las que pueda evitar la necesidad de analizar el CSS, pero desafortunadamente, necesito almacenar las reglas en alguna estructura de datos. Mi proyecto realmente funciona bastante bien con esto, ya que en su mayoría implica reglas básicas de CSS (caso de uso principal). Sin embargo, será bueno estar a prueba de tontos ya que hay un caso de uso donde puede necesitar analizar cualquier CSS. – ankit