之前项目需求需要写一个纯js文本比较工具,在此小编把代码分享在平台供大家参考,算法有待优化,本文写的不好还请见谅。
先上效果图:
代码如下所示:
把源码保存为html格式的文件就可以直接运行了
<!doctype html> <html> <head> <title>文本比较工具</title> <style type="text/css"> *{padding:px;margin:px;} html,body{ overflow-y: hidden; } .edit_div{ border: px solid #CCCCCC; overflow: auto; position: relative; } .edit_div textarea{ resize:none; background: none repeat scroll transparent; border: none; width: %; height:px; overflow-y: scroll; position: absolute; left: px; top: px; z-index: ; font-size: px; white-space: pre-wrap; word-wrap: break-word; word-break:break-all; } .edit_div pre{ overflow-y: scroll; white-space: pre-wrap; word-wrap: break-word; word-break:break-all; width: %; height:px; text-align: left; color: #ffffff; z-index: ; font-size: px; } </style> </head> <body> <table style="width:%"> <tr> <td style="width:%"> <div class="edit_div"> <pre id="edit_pre_"></pre> <textarea id="edit_textarea_" onscroll="test_scroll()" oninput="textchange()" onpropertychange="textchange()"></textarea> </div> </td> <td style="width:%"> <div class="edit_div"> <pre id="edit_pre_"></pre> <textarea id="edit_textarea_" onscroll="test_scroll()" oninput="textchange()" onpropertychange="textchange()"></textarea> </div> </td> </tr> </table> <script type="text/javascript"> function test_scroll(){ document.getElementById("edit_pre_").scrollTop=document.getElementById("edit_textarea_").scrollTop; document.getElementById("edit_pre_").scrollTop=document.getElementById("edit_pre_").scrollTop; document.getElementById("edit_textarea_").scrollTop=document.getElementById("edit_textarea_").scrollTop; } function test_scroll(){ document.getElementById("edit_pre_").scrollTop=document.getElementById("edit_textarea_").scrollTop; document.getElementById("edit_pre_").scrollTop=document.getElementById("edit_pre_").scrollTop; document.getElementById("edit_textarea_").scrollTop=document.getElementById("edit_textarea_").scrollTop; } function textchange(){ var op = eq({ value: document.getElementById("edit_textarea_").value, value: document.getElementById("edit_textarea_").value }); document.getElementById("edit_pre_").innerHTML=op.value+"\r\n"; document.getElementById("edit_pre_").innerHTML=op.value+"\r\n"; } function eq(op) { if(!op){ return op; } if(!op.value_style){ op.value_style="background-color:#FECC;"; } if(!op.value_style){ op.value_style="background-color:#FECC;"; } if(!op.eq_min){ op.eq_min=; } if(!op.eq_index){ op.eq_index=; } if (!op.value || !op.value) { return op; } var ps = { v_i: , v_new_value: "", v_i: , v_new_value: "" }; while (ps.v_i < op.value.length && ps.v_i < op.value.length) { if (op.value[ps.v_i] == op.value[ps.v_i]) { ps.v_new_value += op.value[ps.v_i].replace(/</g,"<").replace(">",">"); ps.v_new_value += op.value[ps.v_i].replace(/</g,"<").replace(">",">"); ps.v_i += ; ps.v_i += ; if (ps.v_i >= op.value.length) { ps.v_new_value += "<span style='" + op.value_style + "'>" + op.value.substr(ps.v_i).replace(/</g,"<").replace(">",">") + "</span>"; break; } if (ps.v_i >= op.value.length) { ps.v_new_value += "<span style='" + op.value_style + "'>" + op.value.substr(ps.v_i).replace(/</g,"<").replace(">",">") + "</span>"; break; } } else { ps.v_index = ps.v_i + ; ps.v_eq_length = ; ps.v_eq_max = ; ps.v_start = ps.v_i + ; while (ps.v_index < op.value.length) { if (op.value[ps.v_index] == op.value[ps.v_i + ps.v_eq_length]) { ps.v_eq_length += ; } else if (ps.v_eq_length > ) { if (ps.v_eq_max < ps.v_eq_length) { ps.v_eq_max = ps.v_eq_length; ps.v_start = ps.v_index - ps.v_eq_length; } ps.v_eq_length = ; break;//只寻找最近的 } ps.v_index += ; } if (ps.v_eq_max < ps.v_eq_length) { ps.v_eq_max = ps.v_eq_length; ps.v_start = ps.v_index - ps.v_eq_length; } ps.v_index = ps.v_i + ; ps.v_eq_length = ; ps.v_eq_max = ; ps.v_start = ps.v_i + ; while (ps.v_index < op.value.length) { if (op.value[ps.v_index] == op.value[ps.v_i + ps.v_eq_length]) { ps.v_eq_length += ; } else if (ps.v_eq_length > ) { if (ps.v_eq_max < ps.v_eq_length) { ps.v_eq_max = ps.v_eq_length; ps.v_start = ps.v_index - ps.v_eq_length; } ps.v_eq_length = ; break;//只寻找最近的 } ps.v_index += ; } if (ps.v_eq_max < ps.v_eq_length) { ps.v_eq_max = ps.v_eq_length; ps.v_start = ps.v_index - ps.v_eq_length; } if (ps.v_eq_max < op.eq_min && ps.v_start - ps.v_i > op.eq_index) { ps.v_eq_max = ; } if (ps.v_eq_max < op.eq_min && ps.v_start - ps.v_i > op.eq_index) { ps.v_eq_max = ; } if ((ps.v_eq_max == && ps.v_eq_max == )) { ps.v_new_value += "<span style='" + op.value_style + "'>" + op.value[ps.v_i].replace(/</g,"<").replace(">",">") + "</span>"; ps.v_new_value += "<span style='" + op.value_style + "'>" + op.value[ps.v_i].replace(/</g,"<").replace(">",">") + "</span>"; ps.v_i += ; ps.v_i += ; if (ps.v_i >= op.value.length) { ps.v_new_value += "<span style='" + op.value_style + "'>" + op.value.substr(ps.v_i).replace(/</g,"<").replace(">",">") + "</span>"; break; } if (ps.v_i >= op.value.length) { ps.v_new_value += "<span style='" + op.value_style + "'>" + op.value.substr(ps.v_i).replace(/</g,"<").replace(">",">") + "</span>"; break; } } else if (ps.v_eq_max > ps.v_eq_max) { ps.v_new_value += "<span style='" + op.value_style + "'>" + op.value.substr(ps.v_i, ps.v_start - ps.v_i).replace(/</g,"<").replace(">",">") + "</span>"; ps.v_i = ps.v_start; } else { ps.v_new_value += "<span style='" + op.value_style + "'>" + op.value.substr(ps.v_i, ps.v_start - ps.v_i).replace(/</g,"<").replace(">",">") + "</span>"; ps.v_i = ps.v_start; } } } op.value = ps.v_new_value; op.value = ps.v_new_value; return op; } function settextheight(){ var heigth=(document.documentElement.clientHeight-)+"px" document.getElementById("edit_pre_").style.height=heigth; document.getElementById("edit_textarea_").style.height=heigth; document.getElementById("edit_pre_").style.height=heigth; document.getElementById("edit_textarea_").style.height=heigth; } window.onload=function(){ settextheight(); window.onresize=function(){ settextheight(); } } </script> </body> </html>
以上代码是使用的纯JavaScript代码实现文本比较工具,希望对大家有所帮助!
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
更新日志
2024年11月18日
2024年11月18日
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】