Tôi đang cố gắng để thực hiện phân tích cú pháp của CSS bằng JavaScript để:Parsing CSS bằng JavaScript/jQuery
a {
color: red;
}
được phân tách thành các đối tượng:
{
'a' {
'color': 'red'
}
}
Trước hết, là có một Javascript/jQuery thư viện Tôi có thể sử dụng?
Việc triển khai của tôi khá cơ bản, vì vậy tôi chắc chắn nó không phải là bằng chứng lừa đảo bằng bất kỳ phương tiện nào. Ví dụ, nó hoạt động tốt cho CSS cơ bản, nhưng đối với một tài sản của các loại:
background: url(data:image/png;base64, ....);
Nó thất bại vì tôi đang sử dụng để tách split(';')
property:value
cặp. Ở đây, ;
xảy ra trong các value
, do đó, nó chia tách tại điểm đó quá.
Có cách nào khác để thực hiện việc này không?
Đây là mã:
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,"");
}
Cảm ơn!
Tại sao bạn muốn làm điều đó? bạn đang cố gắng đạt được điều gì. Có thể có cách khác (đơn giản hơn) để giải quyết vấn đề của bạn –
màu xanh được phân tích thành màu đỏ ?!:) –
@Pablo Tôi đã cố gắng hết sức để nghĩ ra các cách thay thế mà tôi có thể tránh được sự cần thiết phải phân tích cú pháp CSS, nhưng thật không may, tôi cần phải lưu trữ các quy tắc trong một số cấu trúc dữ liệu. Dự án của tôi thực sự hoạt động khá tốt với điều này, vì nó chủ yếu liên quan đến các quy tắc CSS cơ bản (trường hợp sử dụng chính). Tuy nhiên, nó sẽ được tốt đẹp để được fool-proof vì có một trường hợp sử dụng, nơi nó có thể cần phải phân tích cú pháp bất kỳ CSS. – ankit