在做一个项目的时候,需要查找某些标点符号,在标点符号后插入一些标示。
如果文章很大的情况下,遍历应该采用模拟异步处理,不然可能会很卡。
代码如下;
var Spliter=function() { var N=0; var Timers=100; var SP=this; SP.callback=function(){}; var Spd_action_html="<v:rect style='width:10px;height:16px;left:0px;' class='Spd_action' version='1.0' o:SPT='70' coordsize = '21600,21600' filled = 't' stroked = 'f' fillcolor = 'red' strokecolor = 'black' actionType='0' actionTime='0.5' splitType='auto'><v:fill opacity = '0.6'></v:fill></v:rect>"; function AddSpliter(Range,n,A) { if(n==A.length){SP.callback(); return} if(Range.findText(A[n])) { N++; str=Range.text; var html="<span id='Judge_Spd_action'></span>"; Range.pasteHTML(str+html); var Snode=$("Judge_Spd_action"); var Next=Snode.nextSibling; var Flag=true; if(Next&&Next.nodeName=="rect"&&Next.className=="Spd_action") { Snode.removeNode(true); Flag=false; } if(Flag){Snode.outerHTML=Spd_action_html;} Range.collapse(true); if(N%Timers==0){ setTimeout(function(){AddSpliter(Range,n,A);},10);} else{AddSpliter(Range,n,A);} } else { var Range = document.body.createTextRange(); setTimeout(function(){AddSpliter(Range,n+1,A);},0); } } this.SplitControl=function() { SpdEditor.eachName(function(node) { var Next=node.nextSibling; var Flag=true; if(Next&&Next.nodeName=="rect"&&Next.className=="Spd_action") { Flag=false; } if(Flag) { node.insertAdjacentHTML("afterEnd",Spd_action_html); } },"IFRAME"); } this.AddSpliter=function(Arr,obj) { var Range = document.body.createTextRange(); AddSpliter(Range,0,Arr); } } Spliter=new Spliter();