Я пытался реализовать систему, в которой я мог бы выводить div с наибольшим количеством загрузок внутри этого div (это просто число), но у меня нет особых навыков в JavaScript.
Я нашел один способ захватить все элементы div и вывести их в консоль, но теперь мне нужно подсчитать наибольшее число в свойстве innerText для каждого найденного элемента div:
const downloads = document.querySelectorAll("[class^='download_count']");
console.info(downloads);
Например, у меня есть:
<div class = "download_count">
3
<em class = "icon"></em>
</div>
<div class = "download_count">
16
<em class = "icon"></em>
</div>
<!-- The list continues... -->
Я пробовал несколько циклов в JavaScript, которые подсчитывали бы числа и выводили наибольшее число с помощью массива и Math.max(), но не могли заставить его работать должным образом, поскольку я заикался, правильно выводя его только один из div с наибольшим номером.
Ожидаемое поведение:
<div class = "download_count">
3
<em class = "icon"></em>
</div>
<div class = "download_count">
16
<em class = "icon"></em>
<div class = "most-downloaded">Most downloaded file on the website!</div>
</div>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


const downloads = document.querySelectorAll('download_count');
// and find max value
Math.max(downloads);
или
const elements = document.getElementsByClassName('download_count');
попробуйте зарегистрировать загрузку, убедитесь, что она не является нулевой или неопределенной console.info(downloads)
и показать зарегистрированные результаты downloads, если они имеют значения, отличные от чисел, отфильтровать их.
К сожалению, он просто показывает мне NodeList [] в консоли, внутри которого только нули.
Хорошо, я сделал это, работая с document.querySelectorAll("[class^='download_count']");, но я до сих пор не знаю, какое самое большое число внутри них
download_counttextContent. (Преобразуйте значение textContent из строки в число, чтобы начальные и конечные пробелы не учитывались при сравнении)let divNodes = document.querySelectorAll('.download_count');
divNodes = Array.from(divNodes);
const maxDownloadedDiv = divNodes.reduce((previousDiv, currentDiv) => {
return Number(previousDiv.textContent) > Number(currentDiv.textContent) ? previousDiv : currentDiv;
});
document.createElement.appendChild.const mostDownloaded = document.createElement('div');
mostDownloaded.classList.add('most-downloaded');
mostDownloaded.textContent = 'Most downloaded file on the website!';
maxDownloadedDiv.appendChild(mostDownloaded);
// All divs are here.
const divs = document.querySelectorAll('.download_count');
// Create virtual div.
const mostDownloadedDiv = document.createElement('div');
mostDownloadedDiv.className = 'most-downloaded';
mostDownloadedDiv.textContent = 'Most downloaded file on the website!';
// Calculate max downloaded, and then added the virtual div.
let counts = [];
divs.forEach(downloadCount=>counts.push(Number(downloadCount.textContent)));
divs[counts.indexOf(Math.max(...counts))].appendChild(mostDownloadedDiv);<div class = "download_count">
3
<em class = "icon"></em>
</div>
<div class = "download_count">
16
<em class = "icon"></em>
</div>
<!-- The list continues... -->У меня есть другое решение, основанное на том, что ответил Эмре, вот код:
let downCounts = Array();
document.querySelectorAll('.download_count').forEach(elem => {
downCounts.push(elem.innerText.trim())
});
downCounts.sort();
downCounts.reverse(); // It sorts from lowest to highest => we need to reverse so the first object in array is the highest
// Here you put the div styles of the div that will be put in the most downloaded
var div = document.createElement("div");
div.style.width = "200px";
div.style.height = "200px";
div.style.backgroundColor = "red";
// Now we just create the div inside with the most downloads
document.querySelectorAll('.download_count').forEach(elem => {
if (elem.innerText.trim() == downCounts[0])
{
elem.appendChild(div)
}
});
Просто попытался вывести это в консоли, он просто выдает «NaN», что, вероятно, связано со значком внутри download__count, поэтому он все еще не отвечает, так как я пробовал этот метод.