Я думаю, что лучший способ управлять 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.
nvm ls-remote
nvm install v10.15.1
nvm ls
nvm uninstall v10.15.1
npm
в текущей версии узла nvm install-latest-npm
npm
пакеты из одной версии в другую вместо ручной установки каждого из них! Если вы замените 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();
Функция, защищенная от сбоев. Это означает, что здесь не будут затронуты никакие теги или атрибуты, только текст.
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');
Простая строка, которая работает с 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();`
Функция, ничего не возвращающая, очень важна, поэтому браузер не перенаправляется никуда после выполнения букмарклета.
Еще один рекурсивный подход:
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');
Хорошо, я просто объединяю некоторые из замечательных вещей, которые люди выкладывают в одном ответе.
Вот код 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-браузером. Кроме того, я чертовски ленив. вики сообщества, наслаждайтесь!
Эй, вы могли бы попробовать это, проблема в том, что он выполняет поиск по всему телу, поэтому даже атрибуты и тому подобное изменяются.
javascript:document.body.innerHTML=document.body.innerHTML.replace( /old/g, "new" );