Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поиск и замена слов по списку (https://javascript.ru/forum/misc/50991-poisk-i-zamena-slov-po-spisku.html)

EvgenStor 15.06.2017 20:44

Рони,
А если запускать скрипт по нажатии на кнопку "показать еще", с задержкой секунды на три, будет работать?

рони 15.06.2017 21:27

Цитата:

Сообщение от EvgenStor
с задержкой секунды на три

зависит от скорости ответа сервера на эту кнопку и лучше в api кнопки.

рони 15.06.2017 21:37

EvgenStor, ниже это не код!!! а ...
$(function() {
    $.get("list.txt", function(data) {
        function fn() {
            [].forEach.call(document.querySelectorAll(".info"), function(elem) {
                var content = elem.innerHTML;
                data.replace(/^(.*?)\|(.*?)$/gm, function(a, b, c) {
                    content = content.replace(new RegExp("(^|\\s|\\b)(" + b.replace(/[\\\/()*+.?|]/g, "\\$1") + ")(\\.|\\s|\\b|&|$)", "igm"), "$1" + c + "$3")
                });
                elem.innerHTML = content
            })
        }
        fn();
        $("#page-more").on("click", "button", function() {
            window.setTimeout(fn, 3000)
        })
    })
});

EvgenStor 24.09.2017 21:50

Доброе время суток,
Подправьте пожалуйста регулярку в скрипте. Дело в том, что скрипт меняет текст не только между тегами но и в самих тегах, в следствии чего ссылки становятся нерабочими. Т.е. если в ссылке href="" попадается слово подходящее под замену оно меняется, но адреса такого естественно нет.
Исходная ссылка:
<a href="/search/Serie%3A%20Acer%20Jade/" rel="nofollow" class="eTag">Серия: Acer Jade</a>
Обработанная скриптом:
<a href="/search/Серия%3A%20Acer%20Jade/" rel="nofollow" class="eTag">Серия: Acer Jade</a>

Если возможно сделайте так, что бы скрипт обрабатывал только внутри любых тегов, т.е изменял содержимое между <любой тег>Текст для замены</любой тег>

http://plnkr.co/edit/5S7Mv9YVP5NcciACfPbO?p=preview

рони 24.09.2017 22:14

EvgenStor,
http://plnkr.co/edit/U5pEBOR8wrWQa8D2H36K?p=preview

$(function() {
      $.get('list.txt', function(data) {
        [].forEach.call(document.querySelectorAll('.info'), function(elem) {
          var treeWalker = document.createTreeWalker(elem, NodeFilter.SHOW_TEXT, null, false);
          while (treeWalker.nextNode()) {
          var el = treeWalker.currentNode;
          data.replace(/^(.*?)\|(.*?)$/gm, function(a, b, c) {
          el.data = el.data.replace(new RegExp('(^|\\s|\\b)(' + b.replace(/[\\\/()*+.?|]/g, '\\$1') + ')(\\.|\\s|\\b|&|$)', 'igm'), '$1' + c + '$3');
          });
         }
        });
      });
    });

EvgenStor 25.09.2017 10:59

Спасибо рони, работает! Только скорость обработки стала почему то на много медленней, если раньше процесс занимал примерно 3 сек. после появления содержимого сайта, то теперь доходит до 17 сек. Почему так?

рони 25.09.2017 11:22

EvgenStor,
потому что меняет страницу на много раз больше

EvgenStor 25.09.2017 11:44

Рони, можно с этим что то сделать, что бы сократить время обработки? Отблагодарю денежным вознаграждением за твою помощь. А то придется возвратится к старому варианту, без ссылок, поскольку такая задержка сильно замедляет просмотр страниц. Я не думал, что исключение тегов из поиска замены так сильно скажется на производительности, скорее наоборот предполагал, если скрипт исключит лишнее будет работать быстрее.

рони 25.09.2017 13:06

EvgenStor,
заменить на это и
в строке 9 как можно точнее укажите где находится текст для перевода
$(function() {
    $.get("list.txt", function(data) {
        data = data.match(/^(.*?)\|(.*?)$/gm).map(function(b) {
            b = b.split("|");
            b[0] = new RegExp('(^|\\s|\\b)(' + b[0].replace(/[\\\/()*+.?|]/g, '\\$1') + ')(\\.|\\s|\\b|&|$)', 'igm');
            b[1] = '$1' + b[1] + '$3'
            return b
        });
        [].forEach.call(document.querySelectorAll(".info td, .info a"), function(elem) {
            data.forEach(function(b) {
                elem.textContent = elem.textContent.replace(b[0], b[1])
            })
        })
    })
});

EvgenStor 25.09.2017 13:41

Рони,
Стал работать чуть быстрее 9-10 сек на сайте. В редакторе 5-6 сек. http://plnkr.co/edit/8KZn07P7leNW8YA40BbZ?p=preview
Но стал переводить внутри слов Fuji FinePix > Fuji FвePix, Kompaktkamera > KoмpaktКамера
Сайт у меня на https


Часовой пояс GMT +3, время: 17:28.