Javascript Bookmarklet帮助:创建查找/替换Bookmarklet

Javascript Bookmarklet帮助:创建查找/替换Bookmarklet,javascript,replace,bookmarklet,Javascript,Replace,Bookmarklet,我正在尝试稍微修改,这样它会提示搜索文本,然后是替换文本,当所有处理完成后,会显示一个对话框,让我知道已经完成了 我计划在phpmyadmin数据库编辑页面上使用它,该页面将有任意数量的文本框填充文本(这是我需要它搜索和替换的内容)。此外,要搜索和替换的文本可能是多行的,也可能不是多行的,因此我在正则表达式中添加了'm'参数,而且,由于我将执行可能包含html的搜索/替换,因此它们中通常会有引号/双引号。例: 搜索: <img height="76" width="92" src="htt

我正在尝试稍微修改,这样它会提示搜索文本,然后是替换文本,当所有处理完成后,会显示一个对话框,让我知道已经完成了

我计划在phpmyadmin数据库编辑页面上使用它,该页面将有任意数量的文本框填充文本(这是我需要它搜索和替换的内容)。此外,要搜索和替换的文本可能是多行的,也可能不是多行的,因此我在正则表达式中添加了'm'参数,而且,由于我将执行可能包含html的搜索/替换,因此它们中通常会有引号/双引号。例:

搜索:

<img height="76" width="92" src="http://www.gifs.net/Animation11/Hobbies_and_Entertainment/Games_and_Gambling/Slot_machine.gif" /></div>
<div class="rtecenter"> <strong><em><font color="#ff0000">Vegas Baby!<br />
</font></em></strong></div>
有人有什么想法吗?

这对我很有用:

javascript:function%20htmlreplace(a,b,element){if(!element)element=document.body;var%20nodes=element.childNodes;for(var%20n=0;n<nodes.length;n++){if(nodes[n].nodeType==Node.TEXT_NODE){nodes[n].textContent=nodes[n].textContent.replace(new%20RegExp(a,'gi'),b);}else{htmlreplace(a,b,nodes[n]);}}}htmlreplace(prompt("Text%20to%20replace:","old"),prompt("Replacement%20text:","new"));

javascript:function%20htmlreplace(a,b,element){if(!element)element=document.body;var%20nodes=element.childNodes;for(var%20n=0;n这里是原始函数的最直接转换,用于搜索/替换textarea和文本输入,而不是HTML。我还向regex添加了'm'并添加了警报('done')不过,我认为使用“m”可能无法完美地解决您的问题,但我可能错了

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].type && (nodes[n].type.toLowerCase() == 'textarea' || nodes[n].type.toLowerCase() == 'text') ) {
            var r = new RegExp(a, 'gim');
            nodes[n].value = nodes[n].value.replace(r, b);
        } else {
            htmlreplace(a, b, nodes[n]);
        }
    }
}

htmlreplace(prompt('find'), prompt('replace'));
alert('done');
函数htmlreplace(a、b、元素){
如果(!element)element=document.body;
var节点=element.childNodes;

对于(var n=0;n一次搜索将我带到了这里,而上面的内容是错误的(或者至少是过时的),我费了好大劲才更新它,直到它起作用,所以我想我应该将它粘贴到这里:

javascript:var count=0;
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].type&&nodes[n].type.toLowerCase()=='textarea'){
      var r=new RegExp(a,'gim');
      if(nodes[n].value.match(r)){
        count++;
      }
      nodes[n].value=nodes[n].value.replace(r,b)
    }
    else if(nodes[n].nodeValue && nodes[n].nodeValue.length > 0){
      var r=new RegExp(a,'gim');
      if(nodes[n].nodeValue.match(r)){
        count++;
      }
      nodes[n].nodeValue=nodes[n].nodeValue.replace(r,b)
    }
    else{
      htmlreplace(a,b,nodes[n])
    }
  }
}
htmlreplace(prompt('find'),prompt('replace'));
alert('replaced '+count+' words.');
javascript:var count=0;
函数htmlreplace(a、b、元素){
如果(!element)element=document.body;
var节点=element.childNodes;
对于(变量n=0;n 0){
var r=新的RegExp(a,'gim');
if(节点[n].nodeValue.match(r)){
计数++;
}
节点[n].nodeValue=节点[n].nodeValue.replace(r,b)
}
否则{
htmlreplace(a、b、节点[n])
}
}
}
htmlreplace(提示符('find')、提示符('replace'));
警报('替换'+count+'单词');
(镀铬测试) 它有一个字数,而不是一个“完成”的消息。我把它改为扫描所有的textNode元素。
(我想大多数人都不会在意替换页面上的所有文本,但这正是让我来到这里的用例。)

谢谢,我尝试了一下,但什么也没有发生。(提示,但根本没有替换)。谢谢,我尝试了一下,但什么也没有发生。(提示,但根本没有替换).我刚刚在Firefox的一个带有文本区域和文本输入的网页上重新测试了它。它可以工作。如果它对您不起作用,则有一些细节您没有解释。我将您的代码压缩到一个bookmarklet中(删除空格,添加javascript:,等等):这是一个它不起作用的屏幕广播。在其中,我首先显示bookmarklet代码,然后尝试使用破折号(-)作为查找字符串和字母“T”进行查找/替换当行高亮显示时作为替换字符串。第二次我做了相同的操作,只是行没有高亮显示,并且我使用了星号。我做错了什么吗?这是在Firefox 15.01中。下面是我使用的实际代码:
javascript:function%20htmlreplace(a,b,element){if(!element)element=document.body;varnodes=element.childNodes;for(varn=0;您压缩代码时出错。我已使用bookmarklet格式的代码更新了我的答案。今后,我建议您访问以下网站:
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].type&&(nodes[n].type.toLowerCase()=='textarea'||nodes[n].type.toLowerCase()=='text')){var r=new RegExp(a,'gim');nodes[n].value=nodes[n].value.replace(r,b)}else{htmlreplace(a,b,nodes[n])}}}htmlreplace(prompt('find'),prompt('replace'));alert('done');
javascript:var count=0;
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].type&&nodes[n].type.toLowerCase()=='textarea'){
      var r=new RegExp(a,'gim');
      if(nodes[n].value.match(r)){
        count++;
      }
      nodes[n].value=nodes[n].value.replace(r,b)
    }
    else if(nodes[n].nodeValue && nodes[n].nodeValue.length > 0){
      var r=new RegExp(a,'gim');
      if(nodes[n].nodeValue.match(r)){
        count++;
      }
      nodes[n].nodeValue=nodes[n].nodeValue.replace(r,b)
    }
    else{
      htmlreplace(a,b,nodes[n])
    }
  }
}
htmlreplace(prompt('find'),prompt('replace'));
alert('replaced '+count+' words.');