2011-01-22 63 views
2

我試圖稍微修改this,以便它提示要搜索的文本,隨後是要替換的文本,以及何時完成所有處理,顯示一個對話框讓出我知道它完成了。書籤幫助:創建查找/替換書籤

我打算在一個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> 

,也許什麼也沒有更換(只是刪除所有的代碼),或一些其它的HTML。到目前爲止,這是我提出的書籤,(javascript,尤其是書籤不是我經常與混淆的東西),但是,它沒有做任何事情,只要找到/替換,儘管它確實做了提示。

javascript:var%20scrEl=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%20htmlreplace(a,b,element){if(!element)element=document.body;var%20nodes=$(element).contents().each(function(){if(this.nodeType==Node.TEXT_NODE){var%20r=new%20RegExp(a,'gim');this.textContent=this.textContent.replace(r,b);}else{htmlreplace(a,b,this);alert('Done%20processing.');}});}htmlreplace(prompt('Text%20to%20find:',''),prompt('Replace%20with:','')); 

任何人有什麼想法?

回答

1

這裏是最原始的功能直接轉換爲搜索/替換textarea和文本輸入,而不是HTML。我還在正則表達式中添加了'm',並在最後添加了警告('完成')。但是,我認爲使用'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'); 

這裏是作爲一個書籤。

​​
+0

謝謝,我試了一下,但沒有發生任何事情。 (提示,但沒有替代品)。 – 2012-09-20 22:17:53

1

這爲我工作:

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")); 

我所做的只是一個prompt()函數替換oldnew。好書籤。

+0

謝謝,我試了一下,沒有發生任何事情。 (提示,但沒有替代品)。 – 2012-09-20 22:17:12

0

一個搜索登陸我在這裏,和上面的東西是錯誤的(或至少過時),我通過更新它,直到它的工作的麻煩去了,所以我想我會在這裏貼:

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.'); 

(在Chrome中測試) 它有一個字數而不是一個'完成'的信息。我改變它掃描所有的textNode元素。 (我想大多數人不會在乎取代網頁上的所有文字,但這就是把我帶到這裏的用例。)