例如html內容為:“一九二五年創作的[[《傷逝》是魯迅先生唯一一部反映青年男女愛情的小說。]]作者將一對青年的愛情故事放置到“五四”退潮后依然濃重的封建黑暗背景中,透過他們的悲劇命運寓示人們要將個性解放與社會解放結合起來,引領青年去尋求“新的生路”,[[具有深刻的歷史意義。]]”
改變上述內容“[[]]”(“[[]]”為特殊標記)所包含的內容(即“《傷逝》是魯迅先生唯一一部反映青年男女愛情的小說。”,“具有深刻的歷史意義。”)的顏色,方法為采用正則表達式匹配所有需要改變顏色的字符串,在此基礎上改變匹配字符串顏色,並將特殊標記替換為空字符。
js代碼如下:
window.onload = function() {
//匹配所有字符串並改變其顏色,其中"/g"表示全局匹配
document.body.innerHTML = document.body.innerHTML.replace(/\[\[(.*?)\]\]/g, '<font color="#FF6600">$&</font>');
//特殊標記替換為空字符
document.body.innerHTML = document.body.innerHTML.replace(/\[|\]/g, '');
}
可能存在的問題:body.innerHTML會導致ng-click點擊事件失效,解決辦法為不采用body.innerHTML,而是對span或label的innerHTML單獨設置顏色,代碼如下:
var stuAnswerList = document.getElementsByName("stuAnswer");
for(var i = 0; i < stuAnswerList.length; i++){
stuAnswerList[i].innerHTML = stuAnswerList[i].innerHTML.replace(/\[\[(.*?)\]\]/g, '<font color="#FF6600">$&</font>').replace(/\[|\]/g, '');
}
或者采用ng-bind-html:
html:
<span id="stuAnswer" ng-bind-html="stuAnswer|stringKeyword"></span>
js:
app.filter("stringKeyword", ["$sce", function($sce) {
return function(text) {
if (text) {
text = text.replace(/\[\[/g, "<span style=\"color: #FF6600;\">").replace(/\]\]/g, "</span>");
return $sce.trustAsHtml(text);
}
}
}]);