2012-12-06 32 views
6

Đang sử dụng trình chỉnh sửa Fck để ghi nội dung. Đang lưu trữ văn bản dưới dạng các phiên bản trong db. Tôi muốn làm nổi bật những thay đổi trong các phiên bản khi tải văn bản trong FCK Editor.So sánh phiên bản văn bản trong FCKEditor

Cách so sánh văn bản ....

Cách hiển thị bất kỳ văn bản nào đã bị xóa trong chế độ tấn công.

Xin hãy giúp tôi/...

Trả lời

5

Hãy thử thuật toán diff-vá google của http://code.google.com/p/google-diff-match-patch/

Mất cả hai phiên bản trước đó và hiện tại của văn bản và lưu nó vào hai tham số. Chuyển hai tham số đến hàm sau.

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

trả về một html trong đó văn bản mới được đánh dấu màu xanh lá cây và văn bản đã xóa là màu đỏ + bị gạch ngang.