Полагаю, что я бы это ударил. Не стесняйтесь использовать, модифицируйте (или исправьте) этот код по своему усмотрению. Я не могу обещать, что это правильно, но примеры, которые они дают по спецификации w3c, дают одинаковые результаты.
function specificity(selector, isStyleAttribute) {
selector = selector || "";
function numMatches(regex) {
return (selector.match(regex)||[]).length;
}
var numClasses = numMatches(/\.[\w-_]+\b/g);
var numIds = numMatches(/#[\w-_]+\b/g);
var numNamesInBraces = 0;
var namesInBraces = selector.match(/\[[^\]]*\b[\w-_]+\b[^\]]*\]/g) || [];
for (var idx = 0; idx < namesInBraces.length; ++idx) {
numNamesInBraces += (namesInBraces[idx].match(/\b[\w-_]+\b/g)||[]).length;
}
var results = [0,0,0,0];
results[0] = isStyleAttribute ? 1 : 0;
results[1] = numIds;
results[2] = numMatches(/\[[^\]]+\]/g) + numClasses;
results[3] = numMatches(/\b[\w-_]+\b/g) - numIds - numClasses - numNamesInBraces;
return results.join(',');
}
Если вы хотите, чтобы отсортировать массив с ним, он может быть использован как это:
selectors.sort(function(a,b) { return specificity(a) > specificity(b); });
Что такое * 'specificty' * точно? –
@ RokoC.Buljan, это [определено спецификацией] (http://www.w3.org/TR/CSS21/cascade.html#specificity). – josh3736
@ josh3736 ах, так же. thx –