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

标签 javascript html diff

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

这是一个真正的挑战,因为所涉及的对象都相当复杂。我认为最好的方法是将每个对象呈现为 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),但对结果并不满意。


编辑:Here is a working jsfiddle用于展示和讲述!


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

最佳答案

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

{{0}}、{{1}}、{{2}} 而不是 unicode 字符。这提供了它可以支持的更大数量的 HTML。

关于javascript - 是否有任何 JavaScript 库可以为 HTML 创建一个很好的结构化(树)差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5673228/

相关文章:

javascript - 限制 Asp :TextBox to not allow more than 6 character in it

javascript - 如何使用 jQuery 获取表格中的单元格 (<td>) x 和 y 坐标?

javascript - 如何在 jointJS 的元素框内复制检查器编辑文本值 - Rappid

css - 从 child 的高度扩展 parent 的问题。 body 不会达到 100% 的高度。多列

python - 如何从 HTML 中提取嵌套表格?

version-control - Go 的 gofmt 和 diff/VCS 问题?

javascript - 使用javascript获取最高id

javascript - 如何根据用户点击的位置隐藏/显示 <div> 标签?

php - 两个日期之间的碳差以获得小时费率计算的小数

cygwin - 使用 diff 执行两个几乎相似文件的行号之间的映射