• Как выделить жирным несовпадающие части?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    посмотрите на задачу иначе: выделить в каждом результате – поисковую строку. А остальное сделать жирным )

    Поможет простая замена str_replace(), или, если возможно многократное вхождение поискового куска в строке, preg_replace().

    Заменять искомую строку на неё же в обёртке, например, в тегах <span>поисковая строка</span>. Жирноту/нежирноту сделать стилями.
    Ответ написан
    Комментировать
  • Самый лучший по точности бесплатный сервис предоставляющий API для определения местоположения?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Может, Google Geolocation API посмотреть?

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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Незачем что-то парсить. ipinfo.io предоставляет API, есть бесплатный план (до 50 тыс. запросов в месяц)

    Например, с помощью jQuery, без авторизации можно получить IP, страну:
    $.get("https://ipinfo.io", function(response) {
      console.log(response.ip, response.country);
    }, "jsonp")


    Response содержит больше полей:
    {
      "ip": "134.209.xxx.xxx",
      "city": "Clifton",
      "region": "New Jersey",
      "country": "US",
      "loc": "40.8344,-74.1377",
      "org": "AS14061 DigitalOcean, LLC",
      "postal": "07014",
      "timezone": "America/New_York",
      "readme": "https://ipinfo.io/missingauth"
    }
    Ответ написан
    9 комментариев
  • Как в html вывести переменную из js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    У вас же там просто строка текста собирается, ну..
    '<label class="component-input-checkbox-label" for="">' + html.data['name'] + '</label>\n' +
    Ответ написан
    1 комментарий
  • Как записать это циклом?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    В исходном варианте с var переменная i в любых вызовах навешанных функций имеет последнее своё значение из цикла, равное длине experimentElem.

    Замените var на let:
    for (let i = 0; i < experimentElem.length; i++) {

    старый ответ
    Попробуйте так:
    [...experimentElem].forEach((el, i) => {
      el.addEventListener('mouseenter', event => gifElem[i].play());
      el.addEventListener('mouseleave', event => gifElem[i].pause());
    })
    Ответ написан
  • Почему для JS не создают новых директив в роде "use strict"?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вы можете использовать фичи ES6 без «лишних» полифиллов. Тем самым отсечёте всякие старые браузеры.
    Для личной сатисфакции добавить в начале кода якобы директиву:
    "Mr. Robot 2020";
    Ответ написан
    Комментировать
  • Как правильно реализовать передачу данных между окон?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    window.postMessage()

    У меня примерно так организована серверная OAuth2 авторизация в одном проекте. По клику «Войти через ХХХ» открывается новое окно, с URL авторизации в соц.сети с требуемыми параметрами. Там пользователь при необходимости логинится, даёт своё разрешение на доступ к данным. Его перекидывает на указанный URL на моём сервере с параметром &code=xxxxx, который уже мой сервер обменивает напрямую с соц.сетью на токен.

    При этом пользователю мой сервер в ответ на посадку с параметром code показывает какое-то минимальное содержание, главным образом, JS, который делает две вещи:
    • отправит postMessage() в родительское окно с основным приложением – сообщит о результате: получено разрешение или пользователь что-то накосячил или передумал;
    • закроет своё окно.


    Основное же окно после открытия дочернего с авторизацией, сидит, ждёт сообщение. Раз в секунду смотрит, существует ли ещё открытое дочернее окно, не закрыто ли оно (вдруг, пользователь психанул и просто закрыл то окно с авторизацией).
    Получив сообщение об успешной авторизации можно двигаться дальше.
    Получив сообщение об отказе авторизации или узнав, что дочернее окно просто пропало – вывести сообщение "так не пойдет, нужна авторизация. _Повторить?_"
    Ответ написан
    Комментировать
  • Как передать значение переменной в другую функцию, используя addEventListener?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Слушать события клика на всех элементах с классами .food-item-* (может, у них у всех есть какой-то общий класс?) или document.querySelectorAll('[class^=.food-item-]')

    При клике брать значение классов, похожих на .food-item-NNN-bin (регуляркой) и выдирать оттуда число.

    Но это, вестимо, костыль.

    Тут не хорошо, что значение класса используется не для отображения элемента, а для хранения каких-то его данных, этого самого числа. Класс обычно один-для-нескольких элементов. А для данных элемента есть data-атрибуты.
    Ответ написан
    4 комментария
  • Как создать свой .phar из своего класса или файла .php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Конструктор new Phar('my_new_phar.phar') создаёт новый архив
    addFile('SimpleClass.php') добавляет в архив ваш файл с классом.
    Ответ написан
    Комментировать
  • Как сымитировать работу квантового компьютера?

    Похожий вопрос (на англ.) на SO: Are there emulators for quantum computers?

    Чтобы поиграть порекомендую IBM Q Experience где в качестве бэкендов предлагаются:
    • 8 настоящих квантовых компьютеров от 1 до 15 кубитов
    • 1 эмулятор на 32 кубита.
    Скрины
    визуальное составление квантовых схем:
    5e104c9888e39754526507.png

    Jupyter Notebook c Python 3
    5e104cc85fa13705406462.png
    Ответ написан
    7 комментариев
  • Почему люди выпивают на Youtube?

    Это размещение рекламы у блогеров — производители напитков выходят на ведущих популярных YouTube каналов и договариваются и такой нелепой рекламе.

    В примере ролика из комментариев к вопросу это выглядит искусственно и не к месту — когда речь о генераторах и томографии, причем тут водка. Другое дело, когда, например, музыкальный продюсер разбирается с новым синтезатором, предоставленным производителем.
    Ответ написан
    Комментировать
  • Какое сочетание клавиш обернет каждое слово тегом выделяя весь список слов в visual studio code?

    Предложу только вариант с мультикурсором:
    1. поставить курсор перед первым словом
    2. Option + Shift + Click перед последним

    В результате перед каждым из слов появится курсор. Дальше редактировать как обычно:
    • написать открывающий тег,
    • Cmd + стрелка_вправо перекинет курсор в конец строки (у каждой строки в своей позиции)
    • набрать закрывающий тег.
    Ответ написан
    Комментировать
  • В чем идея Mobile First подхода?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Сумев обходиться малым, позволить себе больше — проще, чем обладая многим, начать ограничивать себя.

    То же длиннее и на англ. в посте.
    абзац
    Progressive Advancement has won the game for now as far as I can see. If UI/UX designers start a product design with its desktop version, they will inevitably want to make use of most of the advantages of the advanced end. For example, the hover effect which is supported by a cursor mouse; HD images & complex charts which can display normally only when there is a recent bandwidth. In this way, the designers will make efforts to complete an amazing desktop version and only to find it can hardly be adopted on a mobile end unless they give up a lot of beautiful ideas. If so, the mobile end version will be more like an afterthought, an incomplete product which’s been watered down.
    Ответ написан
    Комментировать
  • Как задать фон и цвет всем объектам по которым не произведён клик?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Аккуратнее вынести стили в CSS. Скажем, стили по умолчанию у всех и некий класс active для единственного выбранного элемента:
    div.answer { background: #222; color: #aeaeae; }
    div.answer.active { background: #fff; color: #000; }


    Тогда скрипт примерно такой:
    const els = [...document.querySelectorAll('.answer')];
    
    const toggle = event => {
      els.forEach(el => el.classList[event.target === el ? 'add' : 'remove']('active'));
    }
    
    els.forEach(el => el.addEventListener('click', toggle));

    Fiddle
    spoiler

    Ответ написан
    Комментировать
  • Не понимаю оператора return в JS?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Смотрите, как вызывать/использовать эту функцию.

    var a = getRectArea( 3, 4 );
    Тут в переменной a окажется значение, которое функция вернула – то, что после "return" в ней оказалось. В вашем примере это 3 * 4, т.е. число 12. Ура, в переменной a теперь лежит число 12

    И как только выполнился return – всё, дальше функция уже не выполняется, это был выход.
    function test() {
      return;
      alert('Привет мир!'); // эта строка никогда не выполнится
    }
    Ответ написан
    1 комментарий
  • Как добавить event listener?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Сам gtag не предусматривает, чтобы слушали события на нём. Поэтому надо прошерстить весь свой код и найти все вызовы gtag() с искомым событием. И там же дописать ваш alert()
    Или сделать свою прослойку для аналитики. На странице вызывать вместо gtag() свою функцию, например, mytag() которая, в свою очередь, станет вызывать gtag() и может, другие скрипты аналитики.

    Upd. в комментариях выяснилось, что ТС не может поменять вызовы к gtag() В таком случае остаётся заменить функцию gtag() на свою:
    function gtag(){
      dataLayer.push(arguments); // это весь исходный её функционал
    
      if (arguments.length > 1
        && typeof arguments[0] === 'string'
        && arguments[0].toLowerString() === 'event'
        && typeof arguments[1] === 'string'
        && arguments[1] === 'name1'
      )
      {
        alert("Name 1!");
      }
    }
    Ответ написан
    4 комментария
  • Как работает этот алгоритм?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Тут как бы длинный поезд из смайликов и короткая видимая платформа остановки. В середине видны какие-то средние вагоны, а левый край поезда, определяемый переменной position – где-то далеко слева, его не видно, а значение position отрицательное. Ноль соответствует точно левому краю, началу видимой «платформы».

    Когда жмут prev – толпа смайликов едет вправо, её position увеличивается. Но при этом последний вагон не должен уехать правее левого края платформы. Поэтому position (обычно отрицательный) делается равным наибольшему из двух: 0 или вычисленному значению. Если «уехали», position получился положительным. И Math.min(0, position) станет равным 0.

    Та же механика с правым краем и движением «поезда» справа налево. Нельзя, чтобы правый вагон поезда уехал левее правого края платформы. Нельзя, чтобы показались пустые рельсы. Поэтому position не должен становиться левее == меньше, чем минус-длина поезда плюс длина платформы.
    Ответ написан
    3 комментария
  • Как заменить "к" на 000?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Ошибка где-то ещё:
    $str = 'тест кк';
    echo str_replace("к","000",$str);  
    
    // тест 000000
    Ответ написан
    Комментировать
  • Как делать пошаговые действия?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Поскольку всё в рамках одного домена/сайта, ограничения Same Origin Policy не помешают.

    Каждая открываемая страница – это новое свежее выполнение скрипта. Поэтому между переходами надо как-то сохранять «состояние» — например, в куках или LocalStorage. В некоторых настройках ни одно из этих хранилищ может оказаться недоступным – например, в зашоренном Tor-браузере.

    С использованием LocalStorage можно примерно так:
    const KEY_STATUS = 'status'; // ключ сохраняемого параметра
    const step = +localStorage.getItem(KEY_STATUS);
    
    /* 
      Шаги:
      0 - переход на /1
      1 - заполнение и клик (видимо, в переходом на новую страницу?)
      2 - переход на /2
    */
    if (0 === step) {
    
      document.location.href = "http://site.ru/1";
    
    } else if (1 === step) {
    
      document.getElementsByName("pw")[0].value = "test";
      document.getElementsByClassName("ur")[0].click();
    
    } else if (2 === step) {
      
      document.location.href = "http://site.ru/2";
    
    }
    
    localStorage.setItem(KEY_STATUS, 1 + step);
    Ответ написан
    7 комментариев