kakalion

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

最近某群的一个基友正在玩一个国外的网页游戏,但全是英文的,于是被他拜托来写一个小工具。。替换整个网页的某些指定词汇变成自己要求的中文词汇。正好顺便也学学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>


于是乎用的还可以吧,可能还有些问题,然后慢慢再改改。~~~

posted on 2013-06-07 20:28  咔咔小狮子  阅读(435)  评论(0编辑  收藏  举报