2012-12-06 10 views
6

Używam edytora Fck do pisania treści. Przechowuję tekst jako wersje w db. Chcę zaznaczyć te zmiany w wersjach podczas ładowania tekstu w edytorze FCK.Porównanie wersji tekstu w FCKEditor

Jak porównać tekst ....

Jak pokazać dowolny tekst, który został usunięty w strajku przez trybie.

Proszę mi pomóc/...

Odpowiedz

5

Spróbuj algorytm diff-łata Google http://code.google.com/p/google-diff-match-patch/

Take zarówno poprzednią i aktualną wersję tekstu i przechowywać go w dwóch parametrów. Przekaż dwa parametry do następującej funkcji.

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; 
} 

ten zwraca HTML, w którym nowy tekst jest oznaczony na zielono, a usunięty tekst jako czerwony + wyrwany.