Вот функция, которая принимает NodeList (или HTMLCollection) и возвращает наиболее распространенный класс , Вы можете запустить этот фрагмент и увидеть вывод консоли.
Вот некоторые детали JavaScript, которые я использую для этого решения.
объекта в ассоциативном массиве
В JavaScript объекты хэш-таблицы, и я использовать это свойство их хранить классы, встречающиеся в качестве ключей, и подсчет столкновений как значений. свойства
объектов, данные переменных
В JavaScript можно добавлять свойства к объектам из переменной. Эти два примера семантически идентичны:
var propName = 'age',
obj = {};
obj[propName] = 18; // obj.age === 18
и
var obj = {};
obj.age = 18;
Сразу вызывается функция выражения (IIFE)
Скажем, у меня есть некоторый код, который одноразовые я использовать один раз, и может быть полезно инкапсулировать в функцию. Обычно я использую это, чтобы избежать загромождения пространства имен функций временными переменными (в противном случае мне нужно отслеживать их).mostCommonClass()
возвращает результат вызова функции:
function() {
var maximumName = '',
maximumValue = 0,
keys = Object.keys(pairs);
keys.forEach(function(key) {
if (pairs[key] > maximumValue) {
maximumName = key;
maximumValue = pairs[key];
}
});
return maximumName;
};
Это делает это путем обертывания тела функции вызова в экспресс. Вот пример без тела функции, чтобы сделать его более понятным.
return (function() { /* do stuff */ }());
Обертывания всех функций в скобках являются одним из способов сделать синтаксис здесь правильно, и ()
в конце вызывает функцию только заявленную.
function mostCommonClass(list, omit) {
var pairs = {};
for (var i = 0; i < list.length; i++) {
var classes = list.item(i).classList;
for (var j = 0; j < classes.length; j++) {
if (pairs[classes[j]]) {
pairs[classes[j]]++;
} else {
pairs[classes[j]] = 1;
}
}
}
if (omit) {
omit.forEach(function(el) {
delete pairs[el];
});
}
console.log(JSON.stringify(pairs));
return (function() {
var maximumName = '',
maximumValue = 0,
keys = Object.keys(pairs);
keys.forEach(function(key) {
if (pairs[key] > maximumValue) {
maximumName = key;
maximumValue = pairs[key];
}
});
return maximumName;
}());
}
console.log(
mostCommonClass(document.getElementsByClassName('mainclass'), ['mainclass'])
);
<div class="mainclass subclass-1 subclass1">1</div>
<div class="mainclass subclass-1 subclass3">2</div>
<div class="mainclass subclass-2 subclass3">3</div>
<div class="mainclass subclass-1 subclass2">4</div>
<div class="mainclass subclass-1 subclass1">5</div>
Большинство решений, вышеперечисленных, относятся к определенному классу или конкретному разделу .. код I опубликовано для общего назначения .. вы можете просто изменить селектор в первой строке, и он будет, чем нацелить только определенные области в вашем html .. – razahassank
это потрясающе! хотя, как я отделяю наиболее распространенный из них? (я довольно новичок в js) – Arazam
он уже сортируется по номеру в порядке убывания .. поэтому вы можете получить доступ к наиболее распространенным классам с помощью сортировки [0], сортировки [1], сортировки [2] и т. д. – razahassank