我有两个1行innerHTML字符串(相当大),我需要比较它们,如果它们不匹配,我需要知道哪些对象是不同的。例如:
HTML 1:
<div><p><span class="text">MyText</span></p></div>
HTML 2:
<div><p><span class="text">NotMyText</span></p></div>
应该返回对象列表,在这种情况下只有1个项目:
<span class="text">NotMyText</span>
我在数千个链接/页面上运行脚本,因此速度非常重要。我尝试了Google Diff,它只返回不匹配的部分。它会说已经删除了MyText并且添加了NotMyText或者类似的东西,但这不是我需要的。
对此有何想法?
答案 0 :(得分:0)
我认为你不应该在字符串级别上进行比较,因为从字符串diff中找不到你的位置,包围元素是什么并不容易。如果您使用DOM树表示,则应该更容易。
如果我是你,我会写一个递归的DOM比较方法,并在完整的树上进行一种深度优先搜索,就像这样(只是伪代码):
DomDifference compare(DOMElement a, DOMElement b) {
if(a.isLeaf()) {
return DomDiff(a, b)
}
foreach(child: a.children()) {
otherChild = b.nextChild()
result = compare(child, otherChild);
if(!result.isEqual()) {
return result;
}
}
return DomDifference.nodesAreEqual;
}