Задать вопрос
  • Как с помощью регулярного выражения найти все теги?

    @rPman
    Регулярные выражения не подходят для анализа html.

    Даже в очень простых случаях они будут неоправданно сложными. Страницу нужно предварительно разобрать на составные элементы, разобрать и отфильтровать их типы (атрибут, текст, теги,..) и уже по этому разбору что либо искать.

    Настоятельно рекомендую готовые анализаторы html, они есть подо все популярные и не очень языки и фреймворки. Например для php - штатные или рекомендую simple_html_dom, код будет простым, работать будет очень быстро, все встроено в php или простой include одного файла..
    Ответ написан
    Комментировать
  • Как с помощью регулярного выражения найти все теги?

    vhood
    @vhood
    Не забывайте отмечать решения
    /<[^<>]+>/
    https://regex101.com/r/GA6w7j/2

    Только цель не ясна. Есть много кейсов, которые не решить такой регуляркой. Например, выделение парных тегов.
    Ответ написан
    5 комментариев
  • Как сделать сквозную нумерацию неупорядоченных списков?

    director-rentv
    @director-rentv
    Frontend-разработчик
    В этом участке кода получилось добиться сквозной нумерации таким кодом:
    ul:first-of-type {
      counter-reset: cnt 0;
    }
    
    li {
      counter-increment: cnt 1;
    }
    
    li::before {
      content: counter(cnt) ". ";
    }
    Ответ написан
    2 комментария
  • Как выводить JS код?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Строка, передаваемая в метод .html(), содержит одинарные кавычки, которые конфликтуют с одинарными кавычками, используемыми для обозначения строки. Используйте экранирование и всё будет ок
    $('#display').html('<a href="#" onclick="$.ajaxCall(\'app.screenChange\', \'appID={app:id}&amp;page=1\', \'GET\'); return false;">Go</a>');

    или можно так
    $('#display').html("<a href='#' onclick=\"$.ajaxCall('app.screenChange', 'appID={app:id}&amp;page=1', 'GET'); return false;\">Go</a>");
    Ответ написан
    2 комментария
  • 1C-Битрикс, аспро: лайт-шоп, Юкасса. Оплата по отдельной ссылке юкассы не подтверждает заказ в Битриксе. В чём проблема?

    @MorphyZ Автор вопроса
    Решил вопрос тем, что в матаданные нужно было добавить параметры битрикса. Оставлю тут, может пригодится кому
    'metadata' => [
                    'BX_PAYMENT_NUMBER'    => $paymentNumber,  - номер платежа
                    'BX_PAYSYSTEM_CODE'    => 12,  -айди юкасса
                    'BX_HANDLER'           => 'YANDEX_CHECKOUT',
                    'cms_name'             => 'api_1c-bitrix',
                ],
    Ответ написан
    Комментировать
  • Как убрать экспоненциальную запись числа в input type=number?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    <input type="number" step="0.00000001" id="numberInput" />
    
    <script>
      const input = document.getElementById("numberInput");
    
      input.addEventListener("input", () => {
        const value = parseFloat(input.value);
        if (!isNaN(value)) {
          input.value = value.toFixed(8); // Форматируем до 8 знаков после запятой
        }
      });
    </script>
    Ответ написан
    2 комментария
  • Как заменить псевдокласс has?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Через чистый CSS никак не заменить. Только если вешать JS обработчик на input и менять класс label.
    Если бы убрать :before, то можно было бы использовать
    Нельзя. Селектор с :has у вас относится к label, а без него - к input.
    Ответ написан
    Комментировать
  • Как запустить проверку? try catch?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    How to get in catch method in Fetch API when there...
    Fetch API: how to determine if an error is a netwo...
    Detect Network Failures When Using Fetch

    Исходя из Вашего вопроса, это будет выглядеть примерно так:
    let response;
    
    async function fetchData(request) {
    
        try {
            response = await Promise.race([
                fetch(request),
                new Promise((_, reject) => setTimeout(
                    () => reject(new Error('Timeout')), 500,  // 0.5 секунды
                )),
            ]);
        }
    
        catch (e) {
    
            // Ошибка с таймаутом
            if (e.message === 'Timeout' || e.message === 'Network request failed') {
                console.log('Проблемы с интернетом!');
            }
    
            // Прочие ошибки
            else {
                throw e;
            }
    
            return;
        }
    
        try {
            // Преобразуем результат запроса в json
            console.log(await response.json());
        }
    
        catch (e) {
            console.log('Ошибка при парсинге json');
        }
    }
    
    
    const request = new Request('https://jsonplaceholder.typicode.com/todos/1', {
        method: 'GET',
    });
    
    fetchData(request);
    Ответ написан
    Комментировать
  • Можно ли в Linux на файловой системе EXT4 запретить именовать файлы одинаково с разным регистром букв?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Надо включить поддержку регистронезависимости при создании файловой системы
    mkfs -t ext4 -O casefold /dev/диск
    или позднее
    umount /dev/диск
    tune2fs -O casefold /dev/диск
    mount /dev/диск

    Затем установить у нужного каталога атрибут регистронезависимости
    chattr +F /путь/к/каталогу
    Ответ написан
    7 комментариев
  • Как сжать в зип архив сайт?

    @alexalexes
    Потому, что у вас в коде происходит обход только по текущему уровню каталога $dir.
    Чтобы обход заныривал глубже, нужно создать рекурсивную функцию.
    Телом рекурсивной функции у вас будет:
    if ($dh = opendir($dir))
    {
    // код, который у вас в вопросе
    }

    А точка вызова для смены подкаталога:
    if (is_file($dir.$file)) {
    // код из вопроса
                }
    else if(is_dir($dir.$file))
    {
       $zip->addEmptyDir($dir.$file);
       // тут должен быть вызов рекурсивной функции, по которой вы передаете контекст $zip и $dir.$file (наверное, передача по ссылке)
    }

    В этом случае у вас будет рекурсивный обход каталогов в глубину.
    PS: Проконтролируйте дескриптор $zip на больших вложенностях и большим содержании файлов, нет ли переполнения выделенной оперативной памяти. Еще стек вызовов функций не бесконечный, тоже проконтролируйте глубину вызова.
    PPS: Бэкапить сайты в архив делается одной строчкой линуксовой командой, и засовывается в crontab. Будет работать надежнее. Эта не задачка для php-разработчика.
    То, что вы делаете - это просто тренировка на кошках, как работать с ZipArchive в PHP.
    Ответ написан
    4 комментария
  • Как картинку сделать кнопкой?

    delphinpro
    @delphinpro Куратор тега HTML
    frontend developer
    Потому что у вас скрипт обработки вкладок кривой.
    Можно поправить скрипт, или хакнуть немножко вот так:

    <button type="button" class="btnNavigation btnActive" data-tab="button_1">
          <img src="../img/image.png" alt="" srcset="" style="pointer-events: none;">
        </button>
    Ответ написан
    Комментировать
  • Почему проблема с localStorage?

    Elaryks
    @Elaryks
    removeItem() удаляет элемент по ключу, а не по значению. В этот метод передаётся только один аргумент. Вам же нужно изменить массив и сохранить его обратно:
    function dele() {
        let x = prompt("Какую");
        let films = JSON.parse(localStorage.getItem("film")) || [];
    
        films = films.filter(elem => elem !== x);
    
        localStorage.setItem("film", JSON.stringify(films));
        rend();
    }

    Кроме того, при добавлении элемента вы не проверяете, существует ли массив перед добавлением в него элемента:
    function add() {
        let x = prompt("Название");
        let films = JSON.parse(localStorage.getItem("film")) || [];
    
        films.push(x);
        localStorage.setItem("film", JSON.stringify(films));
        rend();
    }
    Ответ написан
    Комментировать
  • Есть что то проще чем php?

    Fragster
    @Fragster
    помогло? отметь решением!
    Если обычная статика html то можно собирать с помощью gulp/webpack/rollup из кусков и получать статический сайт. Если не нужно сильно со стилями бороться и это что-то типа сборника документации - то вообще что-то типа https://vuepress.vuejs.org/ можно использовать.
    Потом просто набор статических файлов класть на хостинг и всё.

    Хотя что подразумевается под "настраивать php на сервере" не очень понятно.
    Ответ написан
    3 комментария
  • Что это за блокировка почтового ящика gmail?

    Необычная высокая нагрузка
    Причина временной блокировки от нескольких часов до суток. Причины возможные перечислены. Текст стандартный без подробностей ждём сутки и проверяем
    Ответ написан
    Комментировать
  • Как через кнопку удалить localstorage в конкретной строке?

    @Flawles7
    найти нужный индекс объекта например через findIndex и удалить его к примеру через splice
    const filmsArray = JSON.parse(localStorage.get('film'))
    const removeIndex = filmsArray.findIndex(item => item.title === 'название фильма') 
    filmsArray.splice(removeIndex, 1)
    localStorage.set('film', filmsArray)
    Ответ написан
    Комментировать
  • Почему phpstorm не видит классы битрикс при подключенном composer?

    @russeljo Автор вопроса
    Всё оказалось довольно просто. Нужно папку bitrix/modules пометить как Sources Root
    Ответ написан
    Комментировать
  • Почему в Nginx не работают переменные для try_files?

    @dodo512
    Когда истинно уловие if исполняется только содержимое блока if.
    И то что унаследовано от основной конфигурации, например, add_header.
    А вот try_files не наследуется и исполняется только когда уловие if ложно.

    Эти проблемы возникают только в контексте location.
    При использовании if в контексте server таких проблем нет.
    Достаточно перенести if на уровень server и всё заработает как ожидалось.
    server {
      set $avif_image_path "";
      if ($http_accept ~* "image/avif") {
        set $avif_image_path "$uri.avif";
      }
    
      set $webp_image_path "";
      if ($http_accept ~* "image/webp") {
        set $webp_image_path "$uri.webp";
      }
    
      location ~* \.(png|jpe?g|gif)$  {
        add_header Vary Accept;
    
        try_files $avif_image_path $webp_image_path $uri =404;
      }


    Или как советовали в комментариях избавиться от if и переписать на map.
    Ответ написан
    2 комментария
  • Почему 2 ветки Git не сливаются?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Вы же сами увидели в vscode — что произошло. Вы забыли обновить ветку и начали строить вторую цепочку коммитов. Ваша ветка раздвоилась (diverged).

    Гит вам тоже всё подробно пояснил, что нельзя пушить в другую ветку и предлагает вам сначала объединить разные ветки в одну используя pull.

    Но тут вылезла другая проблема, что у вас немного недонастроен гит. В новых версиях он просит вас уточнить, каким методом вы хотите объединять ветки? Можно путем создания коммита слияния, а можно путем пересаживания вашей текущей ветки main на вершину вышестоящей ветки origin/main, чтобы история осталась простой и линейной, без этих разветвлений и слияний.

    Первая стратегия задается командой
    git config pull.rebase false # merge
    И это поведение по-умолчанию которое было раньше. Рекоменду вам его и выбрать. Эта команда выполняется один раз и больше вам не потребуется.

    А затем просто повторите git pull и всё сработает. Разве что могут возникнуть конфликт, но это уже другая тема.

    Если хотите сохранить линейную историю то можно принудительно вызвать вторую стратегию только для одного раза
    git pull --rebase
    Ответ написан
    3 комментария
  • Главная страница WordPress не обновляется после включения LiteSpeed Cache. Какие могут быть причины?

    @Refguser
    Решения для бизнеса: от создания ИМ до...
    Правильно как-то так:
    1. Удалить и не использовать LiteSpeed Cache если у тебя не LS-сервер, интересует нормальная работа сайта, а не обмануть ПС.
    2. Разобраться что такое кеш, какие виды бывают вообще и какие есть в ВП. После этого, если понадобится подобрать подходящий для твоего случая плагин и настроить его.
    Ответ написан
    Комментировать
  • Почему value выводятся в консоль в обратном порядке?

    @historydev Куратор тега JavaScript
    Редактирую файлы с непонятными расширениями
    Рекурсия заставляет код "углубляться" внутрь структуры данных, доходя до самого конца, а затем начинает возвращаться обратно, выполняя оставшуюся часть кода для каждого уровня вызова. Это и приводит к тому, что значения выводятся в обратном порядке.
    Либо так:
    if(typeof list[elem] == 'object') {
            		console.log(list.value);
                reverseNext(list[elem])
            }


    Либо так:
    if(typeof list[elem] == 'object') {
                reverseNext(list[elem])
            } else {
            	console.log(list.value)
            }
    Ответ написан
    2 комментария