Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

JS - как сократить этот код с помощью регулярки?

Дмитрий Корниенко Гуру (2707), на голосовании 9 месяцев назад
У меня есть 250 ссылок, вида:

 Ссылка 1
Ссылка 2
Ссылка 3
...
Ссылка 250

Так же есть 250 файлов без расширений, с именами:
1, 2, 3 ... 250

Эти файлы лежат в папке /mm

Нужно написать код следующего смысла:

 Если mm/1 существует, то
a:nth-child(1) {display:block;}

Если mm/2 существует, то
a:nth-child(2) {display:block;}

Если mm/3 существует, то
a:nth-child(3) {display:block;}

...и так по каждому файлу до 250
Голосование за лучший ответ
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (157194) 10 месяцев назад
Чтобы сократить код, можно использовать цикл в JavaScript для проверки существования файлов и динамического добавления стилей. К сожалению, JavaScript не может напрямую проверять существование файлов на сервере без запросов к серверу. Но если у тебя есть возможность выполнить такую проверку на сервере, то можно сгенерировать нужный CSS с помощью серверного скрипта.

Если ты всё ещё хочешь сделать это на стороне клиента и у тебя есть список файлов, который ты можешь получить из серверного API, тогда можно использовать AJAX для получения этого списка, и затем динамически применять CSS-стили.

Пример кода на JavaScript, который делает запрос к серверу за списком файлов и затем применяет стили:

```javascript
 fetch('/path-to-server-script') // Серверный скрипт должен возвращать JSON с массивом существующих файлов 
.then(response => response.json())
.then(files => {
files.forEach(file => {
const linkIndex = parseInt(file, 10); // Предполагая, что имя файла это число
const link = document.querySelector(`a:nth-child(${linkIndex})`);
if (link) {
link.style.display = 'block';
}
});
})
.catch(error => console.error('Ошибка:', error));

```

Этот код предполагает, что серверный скрипт возвращает массив с именами файлов, и что ссылки расположены в том порядке, в котором их нужно отображать.
Дмитрий КорниенкоГуру (2707) 10 месяцев назад
А сам серверный скрипт вы могли бы написать?
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (157194) Дмитрий Корниенко, Конечно, вот пример простого серверного скрипта на Node.js с использованием Express, который проверяет наличие файлов в папке `/mm` и возвращает массив имен существующих файлов: ```javascript https://pastebin.com/38xdFaAU ``` Такой скрипт создаст сервер, который при запросе на `/check-files` возвращает список файлов, найденных в папке `/mm`. При его использовании клиентский JavaScript код, который я предоставил ранее, должен корректно работать. Чтобы этот скрипт заработал, убедись, что у тебя установлены Node.js и npm, а также Express, который можно установить с помощью npm: ```bash npm install express ``` И запусти сервер: ```bash node имя_файла.js ```
Дмитрий КорниенкоГуру (2707) 10 месяцев назад
А на простом php можно аналогичное?
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (157194) Дмитрий Корниенко, Да, конечно, вот пример простого серверного скрипта на PHP, который выполняет аналогичное действие: ```php https://pastebin.com/ju59nM8N ``` Этот скрипт создаст серверный endpoint, который при запросе вернёт JSON-массив имен файлов, найденных в папке `mm` (исключая специальные папки `.` и `..`). Этот PHP скрипт предполагает, что он будет размещён в корне веб-сервера, и директория `mm` находится в той же папке, что и скрипт. Чтобы использовать этот скрипт, убедитесь, что у вас настроен веб-сервер с поддержкой PHP (например, Apache или Nginx с PHP-FPM). Сохраните скрипт в файл с расширением `.php` и разместите его в директории, доступной через веб-сервер. Запрос к этому скрипту можно выполнить так же, как и в примере с Node.js, используя клиентский JavaScript.
Дмитрий КорниенкоГуру (2707) 10 месяцев назад
Спасибо, всё заработало.
А подскажите пожалуйста, как вместо
 if (link) { 
link.style.display = 'block';
}
Прописать другое имя класса для этой ссылки <a> ?
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (157194) Дмитрий Корниенко, https://pastebin.com/UeWuFn4W
Дмитрий КорниенкоГуру (2707) 10 месяцев назад
Потрясающе. Я впервые получаю столь развернутые ответы.
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (157194) Дмитрий Корниенко, всё благодаря ИИ, так что это не мои ответы, если так можно выразиться)
Похожие вопросы