Как правильно вывести через скрипт с алгоритмом правильную картинку?

я вот вообще не силен в кодинге.. но мне понадобился скрипт для сайта, Пробовал через gpt4 сделать но в итоге работает кривовато. Перейдем к требованиям которые мне были нужны:

Нужен скрипт на js и html. Он должен будет высчитывать из нескольких скрытых тегов на сайте и по формуле выдавать число, Таких тегов будет несколько, один тег будет рассчитываться по формуле 1=10, второй 1=1, третий 1=5. скрипт должен складывать итоговое значение 10+5+1= 16 и далее по таблице сверяться : от 0 до 100=1 от 101 до 500=2 от 501 до 1000=3 от 1001 до 1500=4 от 1501 до 2000=5 от 2001 до 3000=6 от 3001 до 4500=7

Далее он будет формировать ссылку <img alt="" name="rankimg" border="0" src="/icon/значение из формулы1/здесь будет еще один тег сайта.png" align="absmiddle"< тут вторая скобка просто в редакторе не вставляется...

Дополнения: скрипт должен работать на сайте с движком dle 15.3 и форумом под управлением Bullet Energy 1.3-rev-2021.r9

Если на странице пользователя все работает, то на странице форума скрипт не хочет нормально работать, он зацикливается на первом сообщении и все, либо загружает только первому сообщению картинку остальные пустые, либо загружает всем, причем разные из за "еще один тег сайта" а вот значение формулы для всех подгружается с первого сообщения. Пробовал через бота сгенерировать код на iframe и просто js с подгрузкой с самого движка и везде что то не так. Подскажите или напишите код что бы он нормально работал и для каждого сообщения из шаблоне "short_message.tpl" показывалась своя картинка. В шаблоне есть свои уникальные индификаторы {messageId} <-id сообщения, {autorName} <- имя автора поста ну или login фрейм брался примерно по методу адрес_сайта.com/user/{autorName} далее скрипт сам брал что необходимо, но увы не сильно помогло. Вот код который показывает картинку но не подсчитывает значения, сколрее всего подсчитывает с 1го поста.

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

 <li id="message-{messageId}"><div style="display: none;">
        <span class="tag" data-value="10">{news-num}</span> <!-- Этот тег = 10 -->
        <span class="tag" data-value="5">{forumPostNum}</span> <!-- Этот тег = 5 -->
        <span class="tag" data-value="1">{comm-num}</span> <!-- Этот тег = 1 -->
    </div>

<!-- Место для вывода изображения -->
<div id="result-{messageId}"></div>
<script>
    const messageIds = [{messageId1}, {messageId2}]; // Динамически генерируемые ID сообщений
</script>
<script>
    (function () {
        /**
         * Функция вычисления итогового значения и вывода изображения для одного сообщения.
         * @param {string} messageId - Уникальный идентификатор сообщения.
         */
        function calculateValueForMessage(messageId) {
            // Получаем текущий блок сообщения
            const messageBlock = document.getElementById(`message-{messageId}`);

            // Находим скрытые теги с данными внутри сообщения
            const tags = messageBlock.querySelectorAll('.tag');
            let totalValue = 0;

            // Проверяем существование тегов и вычисляем итоговое значение
            if (tags.length > 0) {
                tags.forEach((tag, index) => {
                    const value = parseInt(tag.getAttribute('data-value'), 10); // Получаем значение из атрибута data-value
                    if (!isNaN(value)) {
                        if (index === 0) totalValue += value * 10; // Первый тег: значение * 10
                        if (index === 1) totalValue += value * 5;  // Второй тег: значение * 5
                        if (index === 2) totalValue += value * 1;  // Третий тег: значение * 1
                    }
                });
            }

            // Определяем диапазон по итоговому значению
            let rangeValue;
            if (totalValue <= 100) rangeValue = 1;
            else if (totalValue <= 500) rangeValue = 2;
            else if (totalValue <= 1000) rangeValue = 3;
            else if (totalValue <= 1500) rangeValue = 4;
            else if (totalValue <= 3000) rangeValue = 5;
            else if (totalValue <= 4500) rangeValue = 6;
            else if (totalValue <= 6000) rangeValue = 7;

            // Формируем ссылку для изображения с использованием значений
            const imgUrl = `/icon/${rangeValue}/[xfgiven_group][xfvalue_group][/xfgiven_group][xfnotgiven_group]1[/xfnotgiven_group].png`;

            // Находим место для вывода изображения
            const resultElement = messageBlock.querySelector(`#result-{messageId}`);
            if (resultElement) {
                resultElement.innerHTML = `
                    <img alt="Rank Image" name="rankimg" border="0" src="${imgUrl}" align="absmiddle" style="margin:0;padding:0;border:0;width: 80px;height: 45px;">
                `;
            } else {
                console.error('Элемент с id="result" не найден для сообщения:', messageBlock);
            }
        }

        // Вызываем функцию для каждого сообщения, передавая уникальный идентификатор
        const messageIds = ['{messageId}']; // Замените на динамическое получение ID сообщений
        messageIds.forEach(messageId => calculateValueForMessage(messageId));
    })();
</script></li>

Ответы (1 шт):

Автор решения: Сергей
<!-- Место для вывода изображения -->
    <div id="result"></div>
 <!-- Скрытые теги -->
   <li class="msg" id="message-{messageId}">
    <div style="display: none;">
        <span class="tag" data-value="{news-num}">{news-num}</span>
        <span class="tag" data-value="{forumPostNum}">{forumPostNum}</span>
        <span class="tag" data-value="{comm-num}">{comm-num}</span>
    </div>
    <div id="result"></div>
</li>
    <script>
    (function () {
        /**
         * Функция вычисления итогового значения и вывода изображения для одного сообщения.
         */
        function calculateValueForMessage() {
            // Получаем уникальный ID сообщения (например, "uniqueId1234")
            const messageId = '{messageId}'; // Замените на реальный ID
            const messageBlock = document.getElementById(`message-{messageId}`);

            // Находим скрытые теги с данными внутри сообщения
            const tags = messageBlock.querySelectorAll('.tag');
            let totalValue = 0;

            // Проверяем существование тегов и вычисляем итоговое значение
            if (tags.length > 0) {
                tags.forEach((tag, index) => {
                    const value = parseInt(tag.getAttribute('data-value'), 10); // Получаем значение из атрибута data-value
                    if (!isNaN(value)) {
                        if (index === 0) totalValue += value * 10; // Первый тег: значение * 10
                        if (index === 1) totalValue += value * 5;  // Второй тег: значение * 5
                        if (index === 2) totalValue += value * 1;  // Третий тег: значение * 1
                    }
                });
            }

            // Определяем диапазон по итоговому значению
let rangeValue;
            if (totalValue <= 100) rangeValue = 1; // Для totalValue <= 100
            else if (totalValue <= 500) rangeValue = 2; // Для totalValue > 100 и <= 500
            else if (totalValue <= 1000) rangeValue = 3; // Для totalValue > 500 и <= 1000
            else if (totalValue <= 1500) rangeValue = 4; // Для totalValue > 1000 и <= 1500
            else if (totalValue <= 2000) rangeValue = 5; // Для totalValue > 1500 и <= 2000
            else if (totalValue <= 3000) rangeValue = 6; // Для totalValue > 2000 и <= 3000
            else if (totalValue <= 4500) rangeValue = 7; // Для totalValue > 3000 и <= 4500
            else rangeValue = 8; // Для totalValue > 4500

            // Формируем ссылку для изображения с использованием значений
            const imgUrl = `/icon/${rangeValue}/[xfgiven_group][xfvalue_group][/xfgiven_group][xfnotgiven_group]1[/xfnotgiven_group].png`;

            // Находим место для вывода изображения
            const resultElement = messageBlock.querySelector('#result');
            if (resultElement) {
                resultElement.innerHTML = `
                    <img alt="Rank Image" name="rankimg" border="0" src="${imgUrl}" align="absmiddle" style="margin:0;padding:0;border:0;width: 80px;height: 45px;">
                `;
            } else {
                console.error('Элемент с id="result" не найден для сообщения:', messageBlock);
            }
        }

        // Вызываем функцию для текущего блока сообщения
        calculateValueForMessage();
    })()

    ;
    </script>
→ Ссылка