iT邦幫忙

0

有關網頁內容部分文字取代

我已經有點了解到JAVASCRIPT的正規化中的搜尋和取代
但是如果小弟想要將一個網頁全部內容中
所有有關(例如:有關-RA取代成小雨、TS取代成雷聲)同時取代
請問一下這程式碼要怎樣寫呢?
小弟在網路查到可以用下列程式碼取代
<script type="text/javascript">

var str="Visit Microsoft!";
document.write(str.replace("Microsoft", "W3Schools"));

</script>
但是他好像一次只能一個
如果我想要多個要怎樣寫呢??

12
ccutmis
iT邦研究生 5 級 ‧ 2011-11-11 09:32:07
最佳解答

以下是用do while迴圈的作法來處理...希望合用~

&lt;pre class="c" name="code">


&lt;script type="text/javascript">
var strOld='ABC-RADEFGTS -RA AAAEZDADFADTSWEFADFA-RAdfjip-RApjierewr-RAfIIIIDDAATSRAdfasdfsdf-RA';
var strNew='';
function strReplaceTest(arg){
	strNew=arg;
	do{
		strNew=strNew.replace('-RA','小雨');
	}while(strNew.indexOf('-RA')!=-1);
	do{
		strNew=strNew.replace('TS','雷聲');
	}while(strNew.indexOf('TS')!=-1);
	alert('原始字串為:\t'+arg+'\n\n取後後字串為:\t'+strNew);
}
window.onLoad=strReplaceTest(strOld);
&lt;/script>
看更多先前的回應...收起先前的回應...

這部份var strOld='ABC-RADEFGTS -RA AAAEZDADFADTSWEFADFA-RAdfjip-RApjierewr-RAfIIIIDDAATSRAdfasdfsdf-RA';
所搜尋的字串
那有辦法可以整個網頁的文字內容嗎??

ccutmis iT邦研究生 5 級 ‧ 2011-11-12 01:27:36 檢舉

那有辦法可以整個網頁的文字內容嗎??

可以的,請將下列源碼存成aaa.html測試看看~

&lt;pre class="c" name="code">
&lt;meta http-equiv="content-type" content="text/html; charset=utf-8" />
&lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">&lt;/script>
&lt;script type="text/javascript">
var strOld='';var strNew='';
function strReplaceTest(arg){
	strNew=arg;
	do{
		strNew=strNew.replace('-RA','小雨');
	}while(strNew.indexOf('-RA')!=-1);
	do{
		strNew=strNew.replace('TS','雷聲');
	}while(strNew.indexOf('TS')!=-1);
	alert('原始字串為:\t'+arg+'\n\n取後後字串為:\t'+strNew);
}
function init(){
	$.get('aaa.html', function(data) {
	$('.result').html(data);
		var pos=data.indexOf('')+138;
		strOld=data.substr(pos,data.length-pos);
		strReplaceTest(strOld);
	});
}
window.onLoad=init();
&lt;/script>


&lt;h3>TS這ERA是-RA測試標題RRA&lt;/h3>
&lt;p>這是測試-RA本文區本文區TS&lt;/p>
&lt;p>這是-RA測試TS版權宣告&lt;/p>

會出現這個錯誤訊息呢....是怎麼了嗎??


會出現這個錯誤訊息呢....是怎麼了嗎??

感謝大大無私分享嚕...上面的訊息問題我已經知道是怎回事嚕
但我想再請教一下
如果我要改成不是跳出訊息視窗
而是直接出現在網頁上的話
那我要改那一段程式碼呢??

ccutmis iT邦研究生 5 級 ‧ 2011-11-14 13:38:32 檢舉

如果有出現亂碼的話,那表示您測試的網頁忘了把文件編碼設為"UTF-8"...
若要直接出現在網頁上的話可以參考下列代碼...

&lt;pre class="c" name="code">
&lt;meta http-equiv="content-type" content="text/html; charset=utf-8" />
&lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">&lt;/script>
&lt;script type="text/javascript">
var strOld='';var strNew='';
$(document).ready(function() {
	strOld=$('.oldStrArea').html();
	strNew=strReplaceTest(strOld);
	alert(strNew);
	$('.newStrArea').html(strNew);
 });
function strReplaceTest(arg){
	var tmpStr=arg;
	do{
		tmpStr=tmpStr.replace('-RA','小雨');
	}while(tmpStr.indexOf('-RA')!=-1);
	do{
		tmpStr=tmpStr.replace('TS','雷聲');
	}while(tmpStr.indexOf('TS')!=-1);
	return tmpStr;
}
&lt;/script>


&lt;h3>原始字串:&lt;/h3>
&lt;div class="oldStrArea">
aaab-RAbbccTS這ERA是-RA測試標題RRA&lt;br />
TS這ERA是-RA測試標題RRA
&lt;/div>
&lt;hr />
&lt;h3>取代後字串:&lt;/h3>
&lt;div class="newStrArea">&lt;/div>

那出現在亂碼的地方小弟我已經知道怎回事嚕
剩下部分我會再測試一下
感謝大大無私的提供你很多寶貴的意見喔
謝謝您嚕

ccutmis大大您好:
如果不想要出現警告訊息
也不用經過警告訊息就直接在網頁內容上執行轉換的話
我需要在程式碼中做那些調整呢??

ccutmis iT邦研究生 5 級 ‧ 2011-11-17 00:51:12 檢舉

怎麼調整喔QQ...請直接看範例吧~

&lt;pre class="c" name="code">
&lt;meta http-equiv="content-type" content="text/html; charset=utf-8" />
&lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">&lt;/script>
&lt;script type="text/javascript">
var strOld='';var strNew='';
$(document).ready(function() {
	strOld=$('body').html();
	strNew=strReplaceTest(strOld);
	$('body').html(strNew);
 });
function strReplaceTest(arg){
	var tmpStr=arg;
	do{
		tmpStr=tmpStr.replace('-RA','小雨');
	}while(tmpStr.indexOf('-RA')!=-1);
	do{
		tmpStr=tmpStr.replace('TS','雷聲');
	}while(tmpStr.indexOf('TS')!=-1);
	return tmpStr;
}
&lt;/script>


	&lt;h3>恩...-RA這次改為TS直接RA轉換-RA&lt;/h3>
	&lt;div class="oldStrArea">aaab-RAbbccTS這ERA是-RA測試標題RRA&lt;br />TS這ERA是-RA測試標題RRA&lt;/div>

我用jQuery在網頁載入後把body標千裡的html內容指定給變數strOld,再把strReplaceTest(strOld)的結果指定給變數strNew,最後把strNew變數內容再放回body標千裡...以上。範例很簡單,希望有幫助~

大大您好經過測試已經可以嚕
可否再請教一次問題
那如果我條件中如果有出現BR轉換成霧
和VCTS要轉換成視區雷聲
但BR會和HTML中的</BR>誤判
而因為VCTS中的TS又會和我其中一個條件的TS互衝
導致只會顯示TS的條件,那這樣如果我要VCTS和TS分開轉換顯示要怎樣轉換顯示呢(VCTS是轉換成視區雷聲)

ccutmis iT邦研究生 5 級 ‧ 2011-11-17 15:36:28 檢舉

寫程式最有趣的地方就是看到它可以按照作者的想法具現化,所以在編寫的過程您需要動動腦去想怎麼解決遇到的問題,比方講您要把BR取代成另一個名詞,但是也會影響到<BR />標籤(請注意是<BR />非</BR>) 那我會在原本的字串取代函式執行前,先把<br>標籤取代成一個比較不會重覆的名詞(例如: {||||} ) 再進行原本的字串取代函式,等轉換完後,再把 {||||} 取代為<br>
大致上的思路是這樣,請參考下列範例:

ccutmis iT邦研究生 5 級 ‧ 2011-11-17 15:38:01 檢舉
&lt;pre class="c" name="code">&lt;meta http-equiv="content-type" content="text/html; charset=utf-8" />
&lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">&lt;/script>
&lt;script type="text/javascript">
var strOld='';var strNew='';
$(document).ready(function() {
	strOld=$('body').html();
	alert(strOld);
	strNew=strReplaceTest(strOld,'&lt;br>','{||||}'); strNew=strReplaceTest(strNew,'BR','霧');
	strNew=strReplaceTest(strNew,'-RA','小雨');strNew=strReplaceTest(strNew,'VCTS','視區雷聲');
	strNew=strReplaceTest(strNew,'TS','雷聲');strNew=strReplaceTest(strNew,'{||||}','&lt;br>');
	$('body').html(strNew);
	alert(strNew);
 });
function strReplaceTest(arg,targetStr,replaceStr){
	var tmpStr=arg;
	do{
		tmpStr=tmpStr.replace(targetStr,replaceStr);
	}while(tmpStr.indexOf(targetStr)!=-1);
	return tmpStr;
}
&lt;/script>


	&lt;h3>恩.BR..-RA這TS次VCTS改為TS直接RA轉換-RA&lt;/h3>
	&lt;div class="oldStrArea">aaab-RAbbccTS這ERABR是-RA測試VCTS標題RRA&lt;BR />TS這ERA是-RA測試標題RRA&lt;/div>

經過測試之後還是會被取代呢??所以好像不可行。

ccutmis iT邦研究生 5 級 ‧ 2011-11-17 17:52:03 檢舉

您要的結果不是 "TS"轉成"雷聲","VCTS"轉成"視區雷聲","BR"轉成"霧","<BR />"則不作轉換...?
...如果是的話應該是有轉換的呀~但若你指的是你自己改寫的程式的話,那就要請你把源碼貼出來才有辦法判斷是哪邊的問題了。我把要轉換的內容再改單純點~也把javascript的源碼再做了些簡潔化,但思路跟原本的是相同的,如下所示:

ccutmis iT邦研究生 5 級 ‧ 2011-11-17 17:52:25 檢舉
&lt;pre class="c" name="code">
&lt;meta http-equiv="content-type" content="text/html; charset=utf-8" />
&lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">&lt;/script>
&lt;script type="text/javascript">
var tarArr=Array('&lt;br>','BR','-RA','VCTS','TS','{||||}');
var repArr=Array('{||||}','霧','小雨','視區','雷聲','&lt;br>');
$(document).ready(function() {
	var strOld=$('body').html();alert('轉換前'+strOld);
	for(var i=0;i&lt;tarArr.length;i++) strOld=strReplaceTest(strOld,tarArr[i],repArr[i]);
	$('body').html(strOld);alert('轉換後'+strOld);
 });
function strReplaceTest(arg,targetStr,replaceStr){
	var tmpStr=arg;
	do{tmpStr=tmpStr.replace(targetStr,replaceStr);}while(tmpStr.indexOf(targetStr)!=-1);
	return tmpStr;
}
&lt;/script>
&lt;style type="text/css">h3{border:solid 1px #aaa;margin:10px;}&lt;/style>

&lt;h3>-RA&lt;/h3>&lt;h3>BR &lt;BR /> BR&lt;/h3>&lt;h3>TS&lt;/h3>&lt;h3>VCTS&lt;/h3>

大大測試上面那一程式碼的時侯會把</br>的部分也顯示出來,所以我該測是您在第九則留言裡面中的程式碼,但我用另一台電腦程式的時候會出現在下列錯誤訊息,錯誤訊息為:物件不支援此屬性或方法,程式就無法執行成功嚕,請問是怎麼了嗎?

ccutmis iT邦研究生 5 級 ‧ 2011-11-24 14:32:04 檢舉

大大測試上面那一程式碼的時侯會把</br>的部分也顯示出來

怎會有</br>這種標千?...BR標千(空標千)只有<br>或<br />,不懂為何的話,請自行找查HTML教學。關於錯誤訊息的描述不夠,故無法幫上忙~最好是把您有問題的源碼貼出來,才有辦法找問題,這裡是幫幫忙,不是程式代寫中心。

10
pqr0007
iT邦研究生 1 級 ‧ 2011-11-11 00:03:32

good question!

10
wiseguy
iT邦超人 1 級 ‧ 2011-11-11 00:10:30

這位同學,就算你不知道可以這樣寫:
document.write(str.replace("RA", "小雨").replace("TS", "雷聲"));
也該猜得到可以這樣寫吧?
str.replace("RA", "小雨");
str.replace("TS", "雷聲");
document.write(str);
希望你不是在讀資訊相關科系,要不然後面的日子可能會很累喔 ...

看更多先前的回應...收起先前的回應...

老師您好:
很不幸我就是在讀資訊相關科系
且我現在也是從事資訊相關工作
但很抱歉JAVASCRIPT是小弟我最近才開始玩的
所以很多東西都不是很懂
但小弟我知道一種觀念
就是不恥下問
感謝老師的解答
剛剛測試之後可以使用
謝謝老師喔...^^

老師對不起
我忍不住笑了

simon88 iT邦研究生 3 級 ‧ 2011-11-11 13:10:32 檢舉

replace的語法的確只能取代第一個,真正的方式要用迴圈處理

目前採用這種可以達到我想要的成果
但如果這部分var str="Visit Microsoft!";
可以做到全文索取的話那就太好了
請問一下要怎樣搭配全文索取呢??

6
conandexter
iT邦好手 10 級 ‧ 2011-11-14 09:25:33

您好!

不恥下問

注音一式 ㄅㄨˋ ㄔˇ ㄒ|ㄚˋ ㄨㄣˋ
漢語拼音 b ch xi w n 注音二式 b ch shi w n

語出論語˙公冶長:「子曰:『敏而好學,不恥下問,是以謂之文也。』」不以向身分較低微、或是學問較自己淺陋的人求教為羞恥。老殘遊記˙第七回:「閣下既不恥下問,弟先須請宗旨何如?」

成語不要亂用 有時候會很失禮的
可以上教育部辭典網站查詢
http://dict.revised.moe.edu.tw/

謝謝您的提醒喔
小弟我會多多注意的

我要發表回答

立即登入回答