2012-12-06 15 views
6

Sto usando l'editor Fck di scrivere contenuti. Sto memorizzando il testo come versioni in db. Voglio evidenziare tali cambiamenti nelle versioni durante il caricamento del testo in FCK Editor.Versione testuale confrontare in FCKEditor

Come confrontare il testo ....

Come mostrare qualsiasi testo che è stato eliminato in sciopero attraverso la modalità.

Please help me/...

risposta

5

Prova algoritmo diff-patch di Google http://code.google.com/p/google-diff-match-patch/

prendere entrambe le versione precedente e la corrente del testo e conservarla in due parametri. Passa i due parametri alla seguente funzione.

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

questo restituisce un html in cui nuovo testo è contrassegnato verde e soppressioni sono il rosso + barrato.

Problemi correlati