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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Короткий ответ:
    /(?<=<img [^<>]*?)src(?:set)?="([^"]*)"/g

    Но чем больше дополнительных условий и хотелок, тем больше доп. кода понадобится или более монструозным получится рег. выражение. Универсальный способ вряд ли получится. Всегда найдётся способ сломать регулярку.
    Ответ написан
    8 комментариев
  • Пишет ли кто-нибудь торрент-движки на JavaScript?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Есть WebTorrent, но там возможен обмен информацией (видео-файлами) только между браузерами по технологии WebRTC.

    Чтобы обмениваться также с обычной сетью torrent, нужны специальные гибридные пиры, которые умеют и в web, и в torrent, но это уже полноценные приложения (десктопные или серверные). В принципе, протокол открытый, так что можно попробовать на ноде сделать такое. Но зачем? Можно же просто приобщиться к уже имеющимся разработкам. Хотя даже некоторые известные torrent-клиенты уже поддерживают это, но пока что не популярные типа utorrent.
    Ответ написан
    1 комментарий
  • Как проверить элементы массива на наличия определенных элементов?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    С помощью регулярный выражений:
    arr = ['3' , '*' , 'IV'];
    let r_num = /^(?:\d+|[IVXLC]+)$/;    //либо арабское, либо римское число
    let r_sig = /^[*\/]$/;               //знак умножения или деления
    
    if (arr[0].match(r_num) && arr[1].match(r_sig) && arr[2].match(r_num)) {
      console.log("Условие выполнено!");
    } else {
      console.log("Ошибка!");
    }
    Ответ написан
    2 комментария
  • Как проверить наличие элементов в строке между определенными элементами?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Поинтересуйтесь, что такое регулярные выражения.
    let m, s = 'dhjsd1dl[sd]sd2sdsd';
    if (m=s.match(/1.*(\[.*\]).*2/)) {
      console.log('Наличие обнаружено!',m[1]);
    }
    Ответ написан
    Комментировать
  • Как добавить элементы в localStorage?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    const data = { ..... }; // не должно быть функций и прочих непотребств
    localStorage.card_data = JSON.stringify(data);

    Потом:
    if (localStorage.card_data) {
      restore_data = JSON.parse(localStorage.card_data);
    }
    Ответ написан
    Комментировать
  • Как передать переменную из одной функции в другую?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Создайте глобальную переменную.
    Давайте назовём её global_var

    Тогда в первой функции делаем так:
    function(e) {
      var url = .....
      window.global_var = url;
      .....
    }


    А во второй функции делаем так:
    function(event) {
      var url = window.global_var;
      .....
    }
    Ответ написан
  • Как встроить в страницу стороннего сайта, открытого в браузере пользователя, блок со своим контентом?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    С помощью браузерного расширения.

    Очевидно, создавать такое придётся самому, но ничего особо сложного. Знаний JS достаточно.

    Документация
    Ответ написан
    Комментировать
  • Как проверить международный номер телефона на валидность?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Конечно, такое возможно реализовать.
    Но алгоритмом, а не рег. выражением.

    Так как вам нужна проверка для любой страны, то понадобится изучить правила составления номера для каждой страны, и затем объединить их в единый алгоритм. Вроде бы не сложно, но долго (это ответ на вопрос "как?").
    Ответ написан
    Комментировать
  • Как исправить баг?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Побольше всяких i, j, x, y, map, left, left1 и магических цифр - и не только искать ошибки станет невозможно, но и вообще разрабатывать дальше. Делайте хотя бы комментарии для себя (а заодно и для отвечающих), что где происходит.

    Как исправить баг?

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Создайте единственный таймер: setInterval(func, 4);
    И в нём перебирайте все элементы.
    Ответ написан
    Комментировать
  • Сохранение действий пользователя?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Например, можно сохранить в localStorage сайта,
    либо в localStorage фоновой страницы.
    Ответ написан
    1 комментарий
  • Как правильно прописать несколько событий onclick?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Для начала, лучше использовать addEventListener().

    Ну а так, смотрите, здесь:
    id1.onclick = Place('Вода');
    вы присваиваете в onclick результат функции Place().
    Так как функция ничего не возвращает (а только производит действия), то получается так:
    Place('Вода');
    id1.onclick = undefined;

    Чтобы функция стала обработчиком, нужно присвоить её саму, а не результат её вызова:
    id1.onclick = Place;
    Но так, конечно, тоже работать не будет. Теперь нужно прочувствовать этот момент, разобраться до полного понимания, чтобы двигаться дальше.
    Ответ написан
    Комментировать
  • Как запретить ввод значения в javascript больше чем n число?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В момент ввода (то есть сразу после ввода) проверять: если два инпута, то лимит 50, иначе 100.

    Момент ввода, как вам уже объяснили в комментах к вопросу, можно поймать событием. А дальше к этому моменту можно прикрутить любую логику.
    Ответ написан
    Комментировать
  • JavaScript: как складывать вещественные числа без погрешности?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Нужно хранить вещественные числа, как целые.
    И лишь при выводе их на экран, в файл и т.д. - переводить в вещественные.

    Очевидно, что любые вещественные числа стандартным способом хранить нельзя (впрочем, как и любые целые) из-за ограничений точности. Если очень нужно медленное универсальное решение, то можно своё решение написать (например, хранить числа в виде строк и складывать поразрядно своими функциями). Ведь строки условно бесконечны. Но в этом случае также накладывается условие на формат хранения.

    Так что если вашему участку кода свыше приходит уже готовый массив в виде вещественных чисел, то никак.
    Ответ написан
    5 комментариев
  • Как перезатереть объект в массиве по айди?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Лучше всего поменять подход к созданию этой структуры.
    А именно, если вам нужно искать по id - сделать отдельный объект (по сути хеш-таблицу), где ключами будут выступать именно id.

    Для существующего массива arrData делается примерно так:
    var obj_by_id = {} //хеш-таблица
    arrData.forEach( (obj, index) => {
      obj_by_id[obj.id] = obj;
      obj.index = index;
    });

    Это немного не честно, но в этом примере индекс я сохраняю в самом объекте.

    Далее получить ссылку на объект с id 111 можно будет так:
    let o = obj_by_id[111];
    o.name = "Kate";


    Если нужно заменить, то как-то так:
    arrData[obj_by_id[111].index] = { ...... } //новый объект


    Естественно, что при такой схеме нужно обновлять obj_by_id при каждом изменении arrData. Это такие операции, как добавление, удаление, всякие там смещения индексов и пр. Да вы и сами это понимаете, надеюсь.

    Большой плюс такого подхода в том, что не нужно перебирать весь массив каждый раз (если исходить из предположения, что он может быть очень большим). А это минимизирует нагрузку на процессор.
    Ответ написан
    Комментировать
  • Js как выбрать один элемент из трёх (без ид, класс, дата и тд)?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    document.querySelectorAll(".burger_item")[1]
    //0 - первый, 1 - второй, 2 - третий
    Ответ написан
    Комментировать
  • Можно ли средствами Canvas, фигурно обрезать изображение?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Конечно, можно.

    Элегантность реализации зависит от конкретной задачи. Например, если нужно всего лишь скрыть часть за пределами контура и при этом контур всегда один и тот же, то можно вообще без канваса обойтись - просто сверху наложить картинку с прозрачностью в центре.

    А если пользователь сам вырезает контур мышкой, то это уже какой-то графический online-редактор. Сложная задачка.

    В крайнем случае всегда можно копировать попиксельно.
    Ответ написан
    Комментировать
  • Как зациклить setInterval?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    let texts = ['text1', 'text2', 'text3', 'text4'];
    let div = document.querySelector('#slider');
    let i = 0;
    
    function timer () {
        setInterval( () => {
            let x = texts[i++];
            if(x !== undefined) {
                div.innerHTML = x
            } else i = 0;
        }, 500);
    };
    timer();
    Ответ написан
    Комментировать
  • Функция .next() на чистом Javascript?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    <div class="one">
          <p class="text"></p>
    </div>
    <div class="two">
          <p class="text"></p>
    </div>
    <script type="text/javascript">
          let contain = document.querySelector('.one > .text');
          contain.innerHTML = 'Текст 1';
          let next = contain.parentElement.nextElementSibling.firstElementChild;
          next.innerHTML = 'Текст 2';
    </script>
    Ответ написан
    Комментировать
  • Почему не удаляется выбранный элемент из массива?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Потому что смещение.

    На первой итерации:
    array ====> [4,4,5,4]
    index ====> 0
    Удаляем 0-й элемент, остаётся [4,5,4]

    На второй итерации:
    array ====> [4,5,4]
    index ====> 1
    Не удаляем ничего, потому что array[1] == 5, а пятерку мы не трогаем.

    Но третьей итерации:
    array ====> [4,5,4]
    index ====> 2
    Удаляем последнюю 4-ку.

    Остаётся [4,5]
    Это и есть сухой остаток.

    Решение

    Перебираем массив в обратном порядке.
    var array = [4, 4, 5, 4];
    var num = 4;
    
    for(var index=array.length-1; index>=0; index--){
        if(array[index] === num){
            array.splice(index, 1);
            console.log(index + " - позиции - " + num + " удалено");
        }
    }
    
    console.log(array + " — остальные числа");

    Ответ написан
    1 комментарий