我在Chrome開發工具中測試以下代碼,即使兩個節點不相同,它也會保持返回true狀態。示例節點如下。只有Div1 & Div4是平等的。我非常自信,我遞歸地觸摸了所有的節點,但是我認爲我沒有用'if'正確設置變量,或者我需要別的地方 - 有點失落,並嘗試了一堆東西。JavaScript遞歸節點等價函數不起作用
var htmlStrings = [
'<div id="one">Some<span>node <em>contents</em> for</span>comparison</div>',
'<div id="two">Some<span>node contents for</span>comparison</div>',
'<div id="one">Some<span>node <strong>contents</strong> for</span>comparison</div>',
'<div id="four">Some<span>node <em>contents</em> for</span>comparison</div>'
];
var div1 = document.createElement('div');
div1.innerHTML = htmlStrings[0];
document.body.appendChild(div1);
var div2 = document.createElement('div');
div2.innerHTML = htmlStrings[1];
document.body.appendChild(div2);
var div3 = document.createElement('div');
div3.innerHTML = htmlStrings[2];
document.body.appendChild(div3);
var div4 = document.createElement('div');
div4.innerHTML = htmlStrings[3];
document.body.appendChild(div4);
function nodeEquivalence(node1, node2) {
var passed = false;
if (node1.nodeType === node2.nodeType) {
if ((node1.tagName === node2.tagName || node1.nodeValue === node2.nodeValue)) {
passed = true;
}
}
node1 = node1.firstChild;
node2 = node2.firstChild;
while (node1 && node2) {
nodeEquivalence(node1, node2);
node1 = node1.nextSibling;
node2 = node2.nextSibling;
}
return passed;
}
console.log(nodeEquivalence(div1, div2));
console.log(nodeEquivalence(div1, div4));
我的猜測是你的「tagName」總是如此,因此它會一直通過。 ||而不是||使用&& –
謝謝。試過,但仍然有同樣的問題。如果它是一個元素,tagName是for;如果它是textNode,nodeValue是for,所以理論上它們都不應該能夠通過。 – devdropper87