我有两个 1 行的 innerHTML 字符串(相当大的(,我需要比较它们,如果它们不匹配,我需要知道哪些对象是不同的。例:
网页 1:
<div><p><span class="text">MyText</span></p></div>
网页 2:
<div><p><span class="text">NotMyText</span></p></div>
应该返回对象列表,在这种情况下只有 1 项:
<span class="text">NotMyText</span>
我在数千个链接/页面上运行脚本,因此速度非常重要。我尝试了谷歌差异,它只返回不匹配的部分。它会说MyText已被删除,NotMyText已被添加或类似的东西,但这不是我所需要的。
对此有任何想法吗?
我认为你不应该在字符串级别进行比较,因为从字符串差异中找出你在哪里,封闭元素是什么并不容易。如果你在 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;
}