2012-08-15 105 views

回答

9

您可以嘗試google-diff-match-patch項目,該項目提供強大的算法來執行同步純文本所需的操作。

演示:http://jsfiddle.net/N6bAn/

代碼:

<div class="test"> 
    <div id="oldStr" class="text">the stackoverflow question and answer version control is very well,i want to do this use javascript,but i don't know how to start,who can give some suggestion?thanks</div> 
    <div id="newStr" class="text">Stack Overflow's diff view is very good. I want to do this using javascript,but i don't know how to start,who can give some suggestion?thanks</div> 
</div> 
<input type="button" value="GO" onclick="launch()" /> 
<div class="test"> 
    <div class="text" id="outputOldStr"></div> 
    <div class="text" id="outputNewStr"></div> 
</div> 
<script type="text/javascript"> 
    var dmp = new diff_match_patch(); 

    function launch() { 
     var text1 = document.getElementById('oldStr').innerHTML; 
     var text2 = document.getElementById('newStr').innerHTML; 
     dmp.Diff_EditCost = 8; 

     var d = dmp.diff_main(text1, text2); 
     dmp.diff_cleanupEfficiency(d); 
     var oldStr = "", newStr = ""; 
     for (var i = 0, j = d.length; i < j; i++) { 
      var arr=d[i]; 
      if (arr[0] == 0) { 
       oldStr += arr[1]; 
       newStr += arr[1]; 
      } else if (arr[0] == -1) { 
       oldStr += "<span class='text-del'>" + arr[1] + "</span>"; 
      } else { 
       newStr += "<span class='text-add'>" + arr[1] + "</span>"; 
      } 
     } 
     document.getElementById('outputOldStr').innerHTML = oldStr; 
     document.getElementById('outputNewStr').innerHTML = newStr; 
    } 
</script> 
+0

是的,這只是我覺得 – artwl 2012-08-15 10:08:57

+1

我通過這個去了,結束了創建一個包裝庫,以幫助在「演示文稿」使用需要'diff_match_patch ':https://github.com/arnab/jQuery.PrettyTextDiff – arnab 2013-01-24 11:29:32

+0

'google-diff-match-patch'的角度包裝:https://github.com/amweiss/angular-diff-match-patch – fiat 2016-04-28 05:01:43

3

有,做差異可視化的JavaScript庫。這是幾個例子,我發現:

我還沒有嘗試過任何人,所以很遺憾,我不能告訴你,這是最適合你的需要,但它可能值得檢查出來。

更新

jsdifflib看起來很有希望,有a demo可用,你可以試試。