Ответы пользователя по тегу JavaScript
  • Ускорить страницу с огромным текстом?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    Он прямо в PHP вставляется? Вам загрузку основной страницы ускорить?
    Используйте XMLHttpRequest / fetch.
    Ответ написан
    Комментировать
  • Как в VK API (виджет на сайт) реализовать отдельные комментарии на каждую запись на сайте?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    Смотрю чисто по документации:
    https://vk.com/dev/widget_comments
    page_id (string) — внутренний идентификатор страницы. Используйте page_id, чтобы разместить два и более независимых виджетов на одной странице.
    Ответ написан
  • Нужна помощь в создании скрипта?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    Первые две кнопки не нужны.

    Взять строковое значение из инпута с айди "num": str = document.getElementById('num').value

    Строку в число:
    var num = Number(str);
    if (isNaN(num)) {
      // ошибка, введено не число
    }


    <input type="button" id="Button3"  value="Посчитать" onclick="calculate()">


    В скрипте:
    function calculate() {
      // тут, собственно. надо получить число и степень из инпутов, посчитать результат, и куда-нибудь его вывести. Например, через alert(), или в дополнительный инпут:
      // document.getElementById('result').value = result;
    }
    Ответ написан
    Комментировать
  • Как настроить поиск div?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    Если правильно понял вопрос, то, на мой взгляд
    txtValue = a[i].getAttribute('data-text');
    Ответ написан
    Комментировать
  • Как зациклить окно ввода значения пока введенные значения не будут удовлетворять условиям?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    function promptGrade() {
        do {
            var grade = prompt('Введите значение от 1 до 100:', '4');
            if (grade === null) return null; // чтобы можно было отменить ввод
            grade = Number(grade); // ←это и это↓ — проверка, что вводится число
        } while (grade < 1 || grade > 100 || Number.isNaN(grade)); // ну и проверка на диапазон
        return grade;
    }


    Вернёт число, либо null в случае отмены ввода пользователем.
    Ответ написан
    Комментировать
  • Как сделать записать в уже существующий файл json (я фронт)?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    Понимаю задачу следующим образом: из JS на клиенте надо скинуть JSON в один определённый файл на "бэкенде" ^ω^

    рецепт велосипеда
    В корне React-проекта (наверное) выполняем npm i express cors body-parser

    В корне React-проекта создаём файл server.js следующего содержания:
    // импорты
    const express = require('express');
    const cors = require('cors');
    const bodyParser = require('body-parser');
    const path = require('path');
    const fs = require('fs');
    
    // пользовательские настройки:
    // на каком порту слушать по умолчанию, можно заоверрайдить через переменную окружения PORT
    const DEFAULT_PORT = 3001;
    // полный путь файла, который перезаписываем (тут, относительно файла server.js)
    const UPDATE_JSON_FILE = path.join(__dirname, 'rel/path/to/file.json');
    // URL на сервере, в которую будем кидать POST-запрос
    const UPDATE_JSON_ENDPOINT = '/api/update_json';
    
    // конфигурирование обработчиков сервера и запуск на заданном порту
    const server = express();
    
    server.use(cors());
    
    const rawParser = bodyParser.raw({type: '*/*'});
    server.post(UPDATE_JSON_ENDPOINT, rawParser, (req, res) => {
        const data = req.body instanceof Buffer ? req.body : Buffer.alloc(0);
        fs.writeFile(UPDATE_JSON_FILE, data, (err) => {
            if (!err) {
                console.log(`Wrote ${Buffer.byteLength(data)} bytes`);
                res.status(200).send('Success!');
            } else {
                console.log(err.toString());
                res.status(500).send(err.toString());
            }
        });
    });
    server.get(UPDATE_JSON_ENDPOINT, (req, res) => { res.status(400).send('POST requests only!'); });
    
    const port = process.env.PORT || DEFAULT_PORT;
    console.log(`Listening on port ${port}`);
    server.listen(port);


    Запускаем этот "бэкенд":
    node server.js

    Альтернативно, с другим портом (по крайней мере, в bash такой синтаксис)
    PORT=8080 node server.js

    В общем, порт можно задать через переменную окружения PORT. Это так, подцепил из примеров для сервера Express.

    Собственно, теперь можно отправить этому серверу JSON в POST-запросе, просто в тело засунуть. Как я понимаю, что-то вроде
    fetch('http://localhost:3001/api/update_json', {method: 'POST', body: JSON.stringify(data)})…


    Сервер возвращает 404 на неправильный путь, 400 на не-POST запрос на /api/update_json, 500 при ошибке записи в файл, ну и 200 если всё прошло успешно.

    "Сервер" пишет в консоль, на каком порту начал слушать, и число записанных байтов при каждом правильном запросе (или ошибку при ошибке записи). Выключается, соответственно, Ctrl+C в консоли.

    Также, если в package.json прописать "proxy": "http://localhost:3001"
    (с портом, соответствующим объективной реальности), то в React'е запрос можно посылать прямо на '/api/update_json', т. е. относительный запрос, без хостнейма, а Реакт догадается, что запрос внешний относительно приложения, и пойдёт к нашему серверу.

    Ну и да, никакой валидации JSON на стороне бэка нет, что в запросе — то и в файл.

    Проверил на NodeJS v10.15.2
    Ответ написан
    1 комментарий
  • Как скрыть родителя tr, если each tr > td:nth-child(5)> div:nth-child(3) содержит в себе строку «[+0]»?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    // Задаём $(), связанный с нужной таблицей
    // table = $('table...')
    
    function handleEachTr() {
        tr = $(this);
        if (tr.find('td:nth-child(6)> div:nth-child(3):contains("[+0]")').size() !== 0) {
            tr.hide();
        }
    }
    
    // ...
    
    table.find('tr').each(handleEachTr);
    
    // компактно (для разового применения)
    
    table.find('tr').each(function () {tr = $(this); if (tr.find('td:nth-child(6)> div:nth-child(3):contains("[+0]")').size()) tr.hide()});
    
    // модно
    table.find('tr').each((i, e) => {tr = $(e); tr.find('td:nth-child(6)> div:nth-child(3):contains("[+0]")').size() ? tr.hide() : 0});
    
    // ещё моднее
    table.find('tr').each((i, tr) => {$(tr).find('td:nth-child(6)> div:nth-child(3):contains("[+0]")').size() ? $(tr).hide() : 0});
    Ответ написан
    2 комментария
  • Простая компрессия JS кода?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    Компрессию веб-сервер делает (т. е. кодга js-файлы не изменяются, но объём передаваемых по сети данных уменьшается), настраивается на веб-сервере, например: Apache, Nginx. Удаление пробелов — это уже частный случай минификации.
    Ответ написан
    Комментировать
  • Функция не видит правильные значения состояние, в чем проблема кто знает?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    Предположу, что переменные создаются в onload, и там же назначается listener (причём listener в дальнейшем остаётся один и тот же), соответственно, из другой scope эти переменные не изменить.

    Думаю, для получения ответа полезно выложить, как назначаются onload, onresize и "onещё", код создания переменных, listener'а и код onresize.
    Ответ написан
    Комментировать