最近某群的一个基友正在玩一个国外的网页游戏,但全是英文的,于是被他拜托来写一个小工具。。替换整个网页的某些指定词汇变成自己要求的中文词汇。正好顺便也学学JS有关节点操作的一些东西~~~嘿嘿。这个小工具可以导入到FF的油猴里面,支持在指定元素下替换文字,也可以指定某个属性条件成立的时候才替换文字。
行了,先发上来吧。。。
<html> <head> <script> var easyTranslator = { words:[], init:function(words){ this.words = words; }, translate:function(dom){ var childNodes = dom.childNodes; for(var i=0;i<childNodes.length;i++){ this.parseAttributes(childNodes[i]); this.parseDomContent(childNodes[i]); } }, getChildNodes:function(dom){ var childNodes = dom.childNodes; var newNodes = new Array(); for(var i=0;i<childNodes.length;i++){ if(childNodes[i].nodeName!='#text'){ newNodes.push(childNodes[i]); } } return newNodes; }, parseAttributes:function(dom){ if(dom.nodeType!=1){ return; } var filter; for(var i=0;i<this.words.length;i++){ filter = this.words[i].filter; if(!filter){ break; } for(var j=0;j<filter.length;j++){ if(this.test(dom.getAttribute(filter[j]),this.words[i].target)){ dom.setAttribute(filter[j],this.words[i].replace); } } } }, parseDomContent:function(dom){ if(dom.nodeType==1){//Element this.translate(dom); }else if(dom.nodeType==3){//#Text for(var j=0;j<this.words.length;j++){ if(this.words[j].condition && this.words[j].condition!=0){ if(this.testCondition(dom.parentNode,this.words[j].condition)){ var val = dom.nodeValue; dom.nodeValue = val.replace(this.words[j].target,this.words[j].replace); } }else{ var val = dom.nodeValue; dom.nodeValue = val.replace(this.words[j].target,this.words[j].replace); } } } }, test:function(content,target){ try{ var regexp = new RegExp(target); if(regexp.test(content)){ return true; }else{ return false; } }catch(e){ return false; } }, testCondition:function(dom,condition){ for(var i=0;i<condition.length;i++){ var sp = condition[i].split('='); if(this.test(sp[0]=='class'?dom.className:dom.getAttribute(sp[0]),sp[1])){ return true; } } return false; } }; window.onload=function(){ var words = [ {target:'娘子',replace:'娘子我爱你!!',condition:["class=LLittle"]}, {target:'塞子',replace:'塞子!么么',condition:["class=LLittle"]} ]; easyTranslator.init(words); easyTranslator.translate(document.body); } </script> </head> <body> <div id="header" class='LLittle'> Cat <br/> 娘子,塞子 <br/> 塞子 </div> </body> </html>
于是乎用的还可以吧,可能还有些问题,然后慢慢再改改。~~~