Найдите все экземпляры 'старых' на веб-странице и замените каждого 'новым', с помощью JavaScript bookmarklet

Я думаю, что лучший способ управлять node.js - это использовать NVM . NVM расшифровывается как Node Version Manager.

Это обязательный инструмент для разработчиков node.js!

Вы можете установить NVM с помощью следующей команды, открыть терминал и запустить любое из следующего: -

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash

или

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash

После установки рекомендуется закрыть текущий терминал и открыть новый, поскольку NVM будет добавлять некоторые переменные среды, поэтому необходимо перезапустить терминал.

Я перечислю некоторые основные команды для использования NVM.

  • Это позволит получить все версии узлов из Интернета. Будут показаны все версии узлов от начала до даты. Также будут указаны версии LTS.
nvm ls-remote 
  • Это установит нужную версию узла (список версий получен с помощью вышеуказанной команды)
nvm install v10.15.1
  • Эта команда даст нам список версий узлов, которые установлены локально
nvm ls
  • Эта команда используется для удаления нужной версии узла с вашего компьютера
nvm uninstall v10.15.1
  • Следующая команда поможет вам выполнить обновление до последней работающей версии npm в текущей версии узла
nvm install-latest-npm
  • NVM можно использовать для управления несколькими версиями узлов одновременно
  • Он также может помочь вам установить все глобальные npm пакеты из одной версии в другую вместо ручной установки каждого из них!
  • Существует множество других применений nvm, сведения о которых и Команды можно найти здесь Node Version Manager

14
задан Simon Hayter 31 January 2013 в 19:58
поделиться

6 ответов

Если вы замените innerHtml, вы уничтожите все события dom, которые есть на странице. Попробуйте обойти документ, чтобы заменить текст:

function newTheOlds(node) {
    node = node || document.body;
    if(node.nodeType == 3) {
        // Text node
        node.nodeValue = node.nodeValue.split('old').join('new');
    } else {
        var nodes = node.childNodes;
        if(nodes) {
            var i = nodes.length;
            while(i--) newTheOlds(nodes[i]);
        }
    }
}

newTheOlds();

Разделение / объединение выполняется быстрее, чем выполнение «замены», если вам не нужно сопоставление с образцом. Если вам нужно сопоставление с образцом, используйте "replace" и регулярное выражение:

node.nodeValue = node.nodeValue.replace(/(?:dog|cat)(s?)/, 'buffalo$1');

В качестве букмарклета:

javascript:function newTheOlds(node){node=node||document.body;if(node.nodeType==3){node.nodeValue=node.nodeValue.split('old').join('new');}else{var nodes=node.childNodes;if(nodes){var i=nodes.length;while(i--)newTheOlds(nodes[i]);}}}newTheOlds();
2
ответ дан 1 December 2019 в 10:03
поделиться

Функция, защищенная от сбоев. Это означает, что здесь не будут затронуты никакие теги или атрибуты, только текст.

function htmlreplace(a, b, element) {    
    if (!element) element = document.body;    
    var nodes = element.childNodes;
    for (var n=0; n<nodes.length; n++) {
        if (nodes[n].nodeType == Node.TEXT_NODE) {
            var r = new RegExp(a, 'gi');
            nodes[n].textContent = nodes[n].textContent.replace(r, b);
        } else {
            htmlreplace(a, b, nodes[n]);
        }
    }
}

htmlreplace('a', 'r');

Версия букмарклета:

javascript:function htmlreplace(a,b,element){if(!element)element=document.body;var nodes=element.childNodes;for(var n=0;n<nodes.length;n++){if(nodes[n].nodeType==Node.TEXT_NODE){nodes[n].textContent=nodes[n].textContent.replace(new RegExp(a,'gi'),b);}else{htmlreplace(a,b,nodes[n]);}}}htmlreplace('old','new');
26
ответ дан 1 December 2019 в 10:03
поделиться

Простая строка, которая работает с jQuery:

`javascript:var a = function(){$("body").html($("body").html().replace(/old/g,'new'));return;}; a();`

Без jQuery:

`javascript:function a (){document.body.innerHTML=document.body.innerHTML.replace(/old/g, "new" );return;}; a();`

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

0
ответ дан 1 December 2019 в 10:03
поделиться

Еще один рекурсивный подход:

function replaceText(oldText, newText, node){ 
  node = node || document.body; 

  var childs = node.childNodes, i = 0;

  while(node = childs[i]){ 
    if (node.nodeType == Node.TEXT_NODE){ 
      node.textContent = node.textContent.replace(oldText, newText); 
    } else { 
      replaceText(oldText, newText, node); 
    } 
    i++; 
  } 
}

Миниатюрный букмарклет:

javascript:function replaceText(ot,nt,n){n=n||document.body;var cs=n.childNodes,i=0;while(n=cs[i]){if(n.nodeType==Node.TEXT_NODE){n.textContent=n.textContent.replace(ot,nt);}else{replaceText(ot,nt,n);};i++;}};replaceText('old','new');
0
ответ дан 1 December 2019 в 10:03
поделиться

Хорошо, я просто объединяю некоторые из замечательных вещей, которые люди выкладывают в одном ответе.

Вот код jQuery от шестого поколения, но сделанный переносимым (я использую jQuery из большого G) и минифицирован в букмарклет:

javascript:var scrEl=document.createElement('script');scrEl.setAttribute('language','javascript');scrEl.setAttribute('type','text/javascript');scrEl.setAttribute('src','http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js');function htmlreplace(a,b,element){if(!element)element=document.body;var nodes=$(element).contents().each(function(){if(this.nodeType==Node.TEXT_NODE){var r=new RegExp(a,'gi');this.textContent=this.textContent.replace(r,b);}else{htmlreplace(a,b,this);}});}htmlreplace('old','new');

ЗАМЕТЬТЕ, что 'old' может быть либо 'строковым литералом', либо 'reg [Ee] x'.

На самом деле, теперь, когда я думаю об этом, шестая передача - это лучший ответ, особенно с моими улучшениями. Я не могу найти ничего, что добавляют другие ответы, использование jQuery обеспечивает невероятную совместимость с X-браузером. Кроме того, я чертовски ленив. вики сообщества, наслаждайтесь!

0
ответ дан 1 December 2019 в 10:03
поделиться

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

javascript:document.body.innerHTML=document.body.innerHTML.replace( /old/g, "new" );
-1
ответ дан 1 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: