一、變通方法
由於改後台資料很困難,那麼由前台(螢幕端)下手是個可行的管道。文章的實際的內容雖然動不了,但最終總得顯示在螢幕上,如果在螢幕輸出時用語法動點手腳,就能改成我們想要顯示的內容了,以下就用我的實際案例來說明。本篇雖然都是用 Blogger 來舉例,但這個概念用到其他支援 javascript 的部落格都是可行的。
二、案例 1──改文章內部標題顏色
以前的文章內部的大標題都是使用藍色(語法為<span style="color:blue;">),當版面配置顏色換了以後,覺得這個顏色不太搭,但又不可能把近百篇文章一個個叫出來改標題顏色。
步驟 1: 先找出修改區塊的位置、特性
打開範本檢查,Blogger 的文章區塊內容類似以下程式碼:
<div class='post-body entry-content' expr:id='"post-body-" + data:post.id'>
<description><data:post.body/></description>
<div style='clear: both;'/> <!-- clear for photos floats -->
</div>
步驟 2: 修改的程式碼
在步驟 1 的程式碼後面,加入以下程式碼:
2014/7/6 更新:步驟 1 是舊範本的內容,如果新範本的話不容易據此找到對應位置,不過以下程式碼可改為放在範本中這個字串
<script type='text/javascript'>
var POSTBODYid="post-body-"+"<data:post.id/>"
document.getElementById(POSTBODYid).innerHTML=document.getElementById(POSTBODYid).innerHTML.replace(/color:blue/g,"color:#0b5394")
</script>
以上程式碼的意思為,用 getElementById 取得文章的區塊的 innerHTML,再用 replace 替換文章區塊的內容,把所有紅字 color:blue 的字串全部替換為 color:#0b5394 這樣的顏色。
結果:除了 IE 以外的瀏覽器都會生效,而 IE 會失效的原因查了很久,才發現 IE 對於 innerHTML 能否修改有限制,請參考「Javascript 語法教學、技巧 (筆記)」→ Javascript 語法技巧 → IE 下 innerHTML.replace() 出問題的原因。
不過改顏色畢竟是小事,IE 不支援就算了,開發部落格工具的過程早就不知為了 IE 撞了多少牆,我也早就在網站下方宣告瀏覽器「避免使用IE」(不過除了改顏色這等小事,開發的工具還是得想辦法相容 IE)。而這個技巧其實主要是可以應用在修改文章內容上,在 IE 下用這個方法修改文字就沒問題了。
應用:如果想要把網站全部文章內容含 "部落格" 的文字,全部替換為 "Blogger" 這個字串,那麼就可以把步驟 2 的程式碼改為以下:
<script type='text/javascript'>
var POSTBODYid="post-body-"+"<data:post.id/>"
document.getElementById(POSTBODYid).innerHTML=document.getElementById(POSTBODYid).innerHTML.replace(/部落格/g,"Blogger")
</script>
以後要大量修改文章內容就是一件很簡單的事了。
三、案例 2──改標籤文字
由於使用「樹狀標籤」,我的標籤名稱格式為「AAA-BBB-CCC」。為了讓版面好看一些,想將 "-" 符號換成 "»" 成為「AAA»BBB»CCC」,如果手動一個個改可是會累死人。
步驟 1: 先找出標籤區塊的位置、特性
檢視網頁原始檔後,發現 Blogger 將標籤放在 <span class='post-labels'> 或 <div class='post-labels'> 的區塊內。
步驟 2: 安裝 jquery
由於目標區塊不像案例 1 固定,使用 jquery 的選擇器才會讓程式比較好寫。如果範本中沒有裝過 jquery,請到 Blogger 後台 → 範本 → 編輯 HTML → 在 </head> 之前插入以下程式碼:
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js' type='text/javascript'/>
步驟 3: 修改的程式碼
在 </head> 之前、jquery 程式碼的後面插入以下程式碼:
B:網頁內容全載入時執行 C 行
C:選擇所有 class 為 post-labels 的區塊裡面的 a 標籤,針對每個 a 標籤執行 D 行。
D:把 a 標籤的 innerHTML 用 javascript 的 replace,將文字中內所有 "-" 字元置換為 "»" 字元。
結果:一開始標籤仍是會顯示 "AAA-BBB-CCC" 的格式,但等到頁面載入完,jquery 程式啟動,便會馬上將所有標籤置換成 "AAA»BBB»CCC" 的格式,可以由本篇文章上方標籤的變化看到效果。
應用:
1. 如果熟悉 jquery 語法,不要用 $(function(){}) 的方法等到頁面讀取完才執行,可以將置換文字的程式碼放在最後一個標籤的程式碼後面立刻執行,那麼置換文字的速度會比較快。
2. 這個方法可以同樣用來置換別的區塊的文字,例如有幾十篇的文章標題想批次更改,把所有標題文字 "部落格" 更改為 "Blogger",那麼就可以先找到文章標題的區塊,利用「jquery 語法 (筆記)」→ Jquery 參考書 → 選擇器範例 來選擇區塊,接著「步驟 3」的 replace 語法換成 replace(/部落格/g,"Blogger")就可以實現要修改的效果。
四、其他技巧
以上的例子都是用於一次置換所有文章的內容,但有時只要修改特定文章時,如果是 Blogger 可以利用技巧縮小範圍,例如只要修改特定標籤名稱為 "站務" 的文章時,只要在以上例子的修改程式碼前後,加上以下程式碼即可:
<b:if cond='data:label.name == "站務"'>
修改的程式碼
</b:if>
如果要修改的標籤為 "非站務" 以外的所有文章,那麼就改為:
<b:if cond='data:label.name != "站務"'>
修改的程式碼
</b:if>
注意 "==" 與 "!=" 的區別,相信利用以上的技巧搭配組合,可以解決大部分置換文字的問題。
How to Find text and replace using jQuery
Blogger 相關文章:
如果我想替換掉文章內文的超連結呢?
回覆刪除開頭自己嘗試用「href」跟「outerHTML」替換但都無果
EX:(前略).replace(/href:舊連結/g,"href:新連結")
(以上的危險動作請勿模仿 XD)
因為原本某篇文章是用「網頁」弄的,後來將其改為「新文章」po,想將插入該篇文章的連結的其他文章都置換掉。
Blogger的「網頁」有點麻煩,改個標題,它會將文章的連結網址依標題做變化...,帶來不少麻煩。
作者已經移除這則留言。
回覆刪除喔喔~了解~
回覆刪除舊連結裡面的"/"一律都改成"\/",新連結則不變
.replace(/http:\/\/lasjargon.blogspot.com\/p\/microsoft-applocale.html/g,"http://lasjargon.blogspot.com/2005/08/microsoftmicrosoft-applocale.html")
因為.html後面已經沒有,所以我拿掉其後的"\/"跟"/",
這樣對嗎?謝謝~
PS.這陣子Blogger真的改版動作頻繁,剛剛才發現範本修改的畫面也大不同了。(剛剛筆誤,重貼一次)
測試成功~~繼續跟標籤奮戰
回覆刪除不好意思,想請問站長,如果想替換掉多篇文章內文的超連結,但是超連結網址卻不是固定的..就是如下每篇文章gdid的部分都不相同,而只想改掉32位元的servername的值.這樣有辦法取代嗎?
回覆刪除http://xxxxx.com.tw/gdsale/gdsale.asp?gdid=4273352&co_servername=96562f656565ac98d4c0547de27c5982
如果是要讓一堆表格加上橫拉條
回覆刪除不知道這取代適用於html 原始碼否??
<5588222952063448486>(以上內容請勿刪除,從括號之後開始留言)
回覆刪除我的表格模式是
<* ......(後面的各個表格參數不一項)
想把它全部加上拉條
變成
<@ style="overflow: auto; width: 100%;"><*......
不知道這個取代html的方式是否可行,因為要取代兩個地方,而且在編輯範本的時候,在<table 會被卡住
*是table
@是div
以上 感謝您
<5577705953398951473>(以上內容請勿刪除,從括號之後開始留言)
回覆刪除後段被吃掉了!!!!
要改成
<7145722894115895124>(以上內容請勿刪除,從括號之後開始留言)
回覆刪除在儲存html範本時,系統會說少了> or/>
然後就不能儲存!!
大概是這樣
回到最初的狀態,好像拿原始範本也找不到與step 1相同的段落
回覆刪除而且已本範例為例(blogger-->部落格),放在相似段落後方好像無效( 相似的地方有三處XD 不知如何判斷該放哪個)
好喔 來試試
回覆刪除我也想一次修改多篇文章的字。
回覆刪除但問題是我想修改多篇文章「上千個不同的字」。
如果用以最下方JS的話,害怕網誌會卡頓。
之後看到另外一篇關於外連的文章。
https://www.wfublog.com/2014/12/traditional-simplified-chinese-auto-switch.html
在想,能否像簡繁字庫的JS外連那樣,把過多的內容弄成外連簡化?
<script type='text/javascript'>
var POSTBODYid="post-body-"+"<data:post.id/>"
document.getElementById(POSTBODYid).innerHTML=document.getElementById(POSTBODYid).innerHTML.replace(/部落格1/g,"Blogger1")
document.getElementById(POSTBODYid).innerHTML=document.getElementById(POSTBODYid).innerHTML.replace(/部落格2/g,"Blogger2")
document.getElementById(POSTBODYid).innerHTML=document.getElementById(POSTBODYid).innerHTML.replace(/部落格3/g,"Blogger3")
</script>
請問一下,把文字改變後,電腦版可以看得到,但沒有辦法看到改變。
刪除請問有沒有辦法令手機版介面用户也能看到修改後的字串?