我正在为 TinyMCE 生成的 HTML 正文开发类似于 wiki 的差异功能。diff-lcs
是接受数组或对象的差异 gem。大多数差异任务都在代码上,只是比较行。HTML 文本正文的区别更为复杂。如果我只是插入文本正文,我会得到一个字符一个字符的比较。虽然输出是正确的,但它看起来像垃圾。
seq1 = "<p>Here is a paragraph. A sentence with <strong>bold text</strong>.</p><p>The second paragraph.</p>"
seq2 = seq1.gsub(/[.!?]/, '\0|').split('|')
=> ["<p>Here is a paragraph.", " A sentence with <strong>bold text</strong>.", "</p><p>The second paragraph.", "</p>"]
如果有人更改了第二段,则差异输出涉及前面的段落结束标记。我不能只使用strip_tags
,因为我想在比较视图上保持格式。理想的比较是基于完整的句子,将 HTML 分离出来。
seq2.NokogiriMagic
=> ["<p>", "Here is a paragraph.", " A sentence with ", "<strong>", "bold text", "</strong>", ".", "</p>", "<p>", "The second paragraph.", "</p>"]
我发现了很多整洁的 Nokogiri 方法,但我没有找到上述方法。