Ответы пользователя по тегу JavaScript
  • Как найти этот элемент?

    @antares4045
    document.querySelector("input.ng-pristine.ng-untouched.ng-valid.ng-valid-required.ng-valid-mask.ng-not-empty")

    НО если document.querySelectorAll с тем же аргументов выдаёт больше одного тега, то нужно больше информации о странице
    Ответ написан
    1 комментарий
  • Как написать регулярное выражение?

    @antares4045
    `+7 (495) 123-45-__`.match(/(.*\d)/gm)[0] //'+7 (495) 123-45'
    Ответ написан
    Комментировать
  • Как создать карирование для этой функции со своим замыканием?

    @antares4045
    const sum = (a, b, c) => a + b + c
    
    function carry(fn, argsCount=null, baseArgs=[]){
        argsCount = argsCount === null ? fn.length : argsCount
        if(baseArgs.length >= argsCount){
            return fn.apply(null, baseArgs)
        }
        return function(...args){
            return carry(fn, argsCount, baseArgs.concat(args))
        }
    }
    
    let a = carry(sum)
    
    let b = a(1)(2)
    
    console.log(b(3)) //6
    console.log(b(10)) //13


    сложно вы вопрос сформулировали, я пока вникал что именно у вас "не работает", устать успел
    Ответ написан
    1 комментарий
  • Как в javascript classe запустить метод в другом методе?

    @antares4045
    Код класса правильный. Проблема с вызовом метода или созданием экземпляра:
    let controller = new DeviceController() //new обязательно
    controller.getAllForClient(req,res)
    Ответ написан
    Комментировать
  • Как понять нижеуказанный код Javascript?

    @antares4045
    function largestOfFour(arr) { 
      let results = []; //аккамулятор результатов
      for (let i = 0; i < arr.length; i++) { //для каждой строки матрицы arr
        let largestNumber = arr[i][0]; //пердпологаем, что первое число в строке является максимальным
        for (let j = 1; j < arr[i].length; j++) { //для всех чисел в строке, начиная со второго
          if (arr[i][j] > largestNumber) { // если текущее число больше нашего текущего максимума
            largestNumber = arr[i][j]; // обновляем значение максимума
          }
        }
        results[i] = largestNumber; //кладём текущий максимум в аккамулятор
      }
    
      return results; //возвращаем аккамулятор как результат работы функции
    }
    Ответ написан
    Комментировать
  • Выставление Cookie и получение их через Fetch API?

    @antares4045
    Сегодня браузеры стали черезчур умные и у них есть гигантское количество причин проигнорировать установку кукиса. Скорее всего (в случае браузеров на хромиуме (тоесть не в опере)) в инструментах разработчика в детализации запроса на вкладке HEADERS сразу за хедером респонса будет маленький желтый треугольник, наведя мышь на который вы сможете прочитать, в чём причина на этот раз.

    Как то так например
    61792042219ba341444647.png

    Но в случае csrf, если у вас есть доступ к коду сервера, присоединюсь к рекомндации Надим Закиров, что лучше класть в специальный хедер и обрабатывать его уже джаваскриптом на стороне клиета: за последний год у одного крупного клиента моей фирмы три раза умирали веб приложения для бизнес аналитики купленные за шестизначные суммы из-за обновления политики безопасности хрома, который просто начинал игнорировать кукисы, потому что кого-то так взломали.
    Ответ написан
  • Как найти ближайшую дату?

    @antares4045
    Если я правильно понял формулировку вопрса, то его можно свести к "найти наименьшую дату из списка, исключая те, что были раньше, чем опорная дата"
    const closestTo = (dateToCompare, datesArray) => {
      const buff = datesArray.filter(date => date >=dateToCompare).sort()
      return buff.length ? buff[0] : undefined
    }
    Ответ написан
    Комментировать
  • Почему функция вызывается сама по себе?

    @antares4045
    Функция сама по себе точно не вызывается: вероятно файл, с скриптом подключён и перевызывается на всех страницах проекта.

    Если найти место не получается, можно изменить условие вызова deleteDots на

    slider && dotsSlider
    Ответ написан
  • Как сделать вертикальный липкий слайдер?

    @antares4045
    а телефон это какое разрешение?
    просто я посмотрел: на всех стандартных разрешениях выглядит слегка стремновато, но работоспособно.

    разве что я бы вам порекомендовал вычесть из scrollTop половину высоты экрана, чтобы картинка переключалась когда большая часть текста видна, а не "снизу показался первый пиксель заголовка".
    Ответ написан
  • Как обновлять дату каждые n-дней, статический сайт?

    @antares4045
    Кроме как через JS на сегодняшний момент опций соверменный веб не предоставляет (кроме совсем экзотичных вариантов вроде открытия айфрейма на сервис, который вычисляет необходимую дату).

    Идея с массивом была мыслью в веронм направлении, но массив конечен. здесь нужно деление без остатка.

    <span class="myDate"></span>
    
    
        <script>
    const startDate = new Date('2021-08-06')  //устанавливаем дату начала интервала 
    const now = new Date() //определяем текущую дату
    const delta = Math.trunc((+now - +startDate) / 3 / 24 / 3600 / 1000); // вычисляем количество трёхдневных интервалов которые прошли с момента startDate
    
    const resDate = startDate
    resDate.setDate(resDate.getDate() + delta * 3) 
    //итоговая дата -- это стартовая дата + количево вычислиных трёхдневных интервалов, вычисленных на предыдущем шаге, умноженые на 3
    
    const dateTag = document.querySelector('.myDate') //находим тег, в котором должна оказаться новая дата
    dateTag.textContent = resDate.toLocaleString('ru', {day : '2-digit', month : 'long'})
    //устанавливаем дату в соответствии с форматом DD MMMM (можете подобрать любой другой) 
        </script>


    теперь при каждом обновлении страницы дата в поле будет соответствовать требованиям
    с точки зрения ux я бы порекомендовал прикрутить здесь ещё интервал, чтобы дата обновлялась сама по себе раз в 10 минут и без перезагрузки

    <span class="myDate"></span>
    
    
        <script>
    
    function updateDate(){
        const startDate = new Date('2021-08-06')
        const delta = Math.trunc((+new Date() - +startDate) / 3 / 24 / 3600 / 1000);
        startDate.setDate(startDate.getDate() + delta * 3)
        document.querySelector('.myDate').textContent = startDate.toLocaleString('ru', {day : '2-digit', month : 'long'})
    }   
    
    updateDate() //обновляем дату при загрузке станицы
    setInterval(updateDate, 10 * 60 * 1000) //затем обновляем данные каждые 10 минут
    
        </script>
    Ответ написан
    Комментировать
  • Почему не работает btoa('кириллица')?

    @antares4045
    Только что сам столкнулся с аналогичной проблемой для basicAuth после пары экспериментов пришёл к выводу что для unicode строк используется композиция
    btoa(unescape(encodeURIComponent(`${login}:${password}`)))

    логином вида
    :✓Сейчас будет кириллица в пароле: покайся, god damn!☸☹☺☻☼☾☿:
    проблем не возникло (браузеры генерят тот же токен, что и этот код)
    Ответ написан
    Комментировать
  • В чем преимущество функций-конструкторов?

    @antares4045
    Разница в механике наследования: первый вариант можно унаследовать, и ему в прототип можно добавлять методы.

    в первом случае, если вы захотите добавить метод, который выводит имя в консоль, то вам будет достаточно
    написать
    Func.prototype.printName = function(){
      console.log(this.name)
    }


    и затем можете обращаться к методу
    a.printName() // выведет в консоль Victoria
    При всём при том, не зависимо от того, сколько экземпляров класса Func вы наплодите метод printName в памяти будет храниться один.

    Во втором случае вы также при помощи несложных манипуляций сможете добиться похожего поведения, но там всегда будут подводные камни, например скорее всего у вас не получится создать наследника для func
    Ответ написан
    Комментировать
  • Как правильно создавать интерактивные геометрические фигуры?

    @antares4045
    Если сдюжите при помощи чистого css -- это будет сильная победа, ибо css всё-таки про создание стилей а не отрисовку с нуля, но наверное, в вебе всё, что сделано на нём без серьёзных огрехов -- самое производительное. Но признаться честно, я вообще не представляю себе небходимого инструментария в css;
    Канвас многим хорош, но он хочет чтобы вы решили много проблем, прочитали его мануалы и тогда будет вам счастье. Раз вместо того, чтобы гуглить правила ресайза для него, вы пошли писать на форум -- это тоже врядли ваш путь (без претензии: это нормально);
    Осталось svg. Для того чтобы он работал, тоже надо учиться, но всевозможных материалов по нему максимальное количество. Суть вашей анимации я, признаться честно, не понял, но вероятно, проблема в том, что анимация по умолчанию идёт в режиме ускорение-замедление, и если вы скажете ей проходить по линейной временной функции, главная ваша проблема отпадёт. И да, svg лучше всего подходит для наведения интерактива. Скорее всего вам стоит разобраться как работает svg сам по себе и не пользоваться сторонними фреймворками, т.к. высока вероятность, что выбранный вами действительно кушает ощутимую производительность.
    Ответ написан