是否有任何 javascript 库可以为 HTML 创建一个漂亮的结构化(树)差异?

Jor*_*kin 5 html javascript diff

我正在尝试提出一个解决方案来支持我们在整个站点中使用的“历史视图”机制。对于这个历史视图的 UI,我想向用户展示一个对象的两次修订之间发生了什么变化。换句话说,差异。

这是一个真正的挑战,因为所讨论的对象都相当复杂。我认为最好的方法是将每个对象呈现为 HTML,然后在生成的 HTML 上使用某种差异工具来向用户展示差异。

到目前为止,我最接近工作解决方案的是使用 google-match-patch 库 ( http://code.google.com/p/google-diff-match-patch/ )。我实现了 wiki 中描述的一种建议方法,用于将 google-match-patch 与结构化内容一起使用(http://code.google.com/p/google-diff-match-patch/wiki/Plaintext),但结果是不太对。作为参考,这是我的(有点粗糙 - 我只是在测试概念)代码:https : //gist.github.com/921264

我的问题:如上述维基页面所述,“正确的解决方案是使用基于树的差异、匹配和补丁。” 任何人都可以建议这样一个用 JavaScript 编写的库吗?

我尝试了 DaisyDiff (java) 并且对结果不满意。


编辑这是一个用于展示和讲述的有效jsfiddle


编辑 #2:分享是关怀https : //github.com/GenuineParts/TableDiff

Mak*_*san 2

您的解决方案的问题在于它可以支持的文档中的 HTML 标记数量有限,因为只有这么多 unicode 字符。我使用了与您发布的相同的方法,这非常有帮助,但我没有使用 unicode 字符,而是使用编号占位符,例如:

{{0}}、{{1}}、{{2}} 而不是 unicode 字符。这使得它可以支持更多的 HTML。