← Все примеры

JavaScript Продуктивность substack.com

Substack: быстрый поиск в записи

Ctrl+Shift+F открывает поиск, который подсвечивает все вхождения фразы в тексте записи.

Код для копирования

// Quick in-post search: press Ctrl+Shift+F to highlight matches in the article
(function () {
  function findRoot() {
    return document.querySelector('.body.markup, .available-content, [class*="postBody"]') || document.body;
  }
  function clearMarks(root) {
    root.querySelectorAll('mark[data-jz-search]').forEach(function (m) {
      var p = m.parentNode; p.replaceChild(document.createTextNode(m.textContent), m); p.normalize();
    });
  }
  function mark(root, q) {
    if (!q) { return 0; }
    var rx = new RegExp(q.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gi');
    var walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null);
    var nodes = [], n; while ((n = walker.nextNode())) { if (rx.test(n.nodeValue)) { nodes.push(n); } }
    var count = 0;
    nodes.forEach(function (node) {
      var span = document.createElement('span');
      span.innerHTML = node.nodeValue.replace(rx, function (m) { count++; return '<mark data-jz-search style="background:#fde68a;color:#111;">' + m + '</mark>'; });
      node.parentNode.replaceChild(span, node);
    });
    return count;
  }
  document.addEventListener('keydown', function (e) {
    if (!(e.ctrlKey && e.shiftKey && (e.key === 'F' || e.key === 'f'))) { return; }
    e.preventDefault();
    var root = findRoot(); clearMarks(root);
    var q = prompt('Search inside post:'); if (q == null || q === '') { return; }
    var n = mark(root, q);
    alert(n + ' match(es) for "' + q + '"');
    var first = root.querySelector('mark[data-jz-search]');
    if (first) { first.scrollIntoView({ behavior: 'smooth', block: 'center' }); }
  });
})();

Как использовать этот пример

  1. Скопируй код кнопкой выше.
  2. Установи JustZix (2 минуты) и открой расширение на нужной странице.
  3. Добавь новое правило, совпадающее с этой страницей.
  4. Вставь код в панель JavaScript правила и сохрани — он запускается при каждом заходе на страницу.

Оцени этот пример

Оценок пока нет — оцени первым.

Этот пример работает?

Сниппеты бесполезны, если их некуда вставить.

JustZix устанавливается за 2 минуты и запускает твой код на каждой подходящей странице. Без аккаунта, без оплаты.

Скачать бесплатно Смотреть применение