2012-12-06 13 views
6

Ich benutze Fck-Editor, um Inhalt zu schreiben. Ich speichere den Text als Version in db. Ich möchte diese Änderungen in Versionen hervorheben, wenn ich den Text im FCK-Editor lade.Textversion vergleichen in FCKEditor

Wie der Text vergleichen ....

Wie jeder Text zeigen, dass in Streik Through-Modus gelöscht wurde.

Bitte helfen Sie mir/...

Antwort

5

Versuchen Googles Diff-Patch-Algorithmus http://code.google.com/p/google-diff-match-patch/

Nehmen beide vorherigen und aktuellen Version des Textes und speichern sie in zwei Parameter. Übergeben Sie die zwei Parameter an die folgende Funktion.

function diffString(o, n) { 
o = o.replace(/<[^<|>]+?>|&nbsp;/gi, ''); 

n = n.replace(/<[^<|>]+?>|&nbsp;/gi, ''); 

var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/)); 
var str = ""; 

var oSpace = o.match(/\s+/g); 
if (oSpace == null) { 
    oSpace = ["\n"]; 
} else { 
    oSpace.push("\n"); 
} 
var nSpace = n.match(/\s+/g); 
if (nSpace == null) { 
    nSpace = ["\n"]; 
} else { 
    nSpace.push("\n"); 
} 

if (out.n.length == 0) { 

for (var i = 0; i < out.o.length; i++) { 
    str += '<span style="background-color:#F00;"><del>' + escape(out.o[i]) + oSpace[i] + "</del></span>"; 
} 
} else { 
if (out.n[0].text == null) { 
    for (n = 0; n < out.o.length && out.o[n].text == null; n++) { 
     str += '<span style="background-color:#F00;"><del>' + escape(out.o[n]) + oSpace[n] + "</del></span>"; 
    } 
} 

for (var i = 0; i < out.n.length; i++) { 
    if (out.n[i].text == null) { 
     str += '<span style="background-color:#0C0;"><ins>' + escape(out.n[i]) + nSpace[i] + "</ins></span>"; 
    } else { 
     var pre = ""; 

     for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++) { 
      pre += '<span style="background-color:#F00;"><del>' + escape(out.o[n]) + oSpace[n] + "</del></span>"; 
     } 
     str += " " + out.n[i].text + nSpace[i] + pre; 
    } 
    } 
} 

return str; 
} 

dies gibt eine HTML in dem neuen Text grün markiert und gelöscht Text als rot + gestrichen.