DOM Level 3 Core предоставляет метод isEqualNode () , который сравнивает содержимое для получения проанализированного узла DOM.
Это поддерживается Firefox, Chrome, Safari и IE9, но не Operaранние браузеры.Если вам нужна поддержка в других браузерах, вам придется реализовать ее самостоятельно.Вот частичная реализация в JS:
function Node_isEqualNode(that, other) {
// Use native support where available
//
if ('isEqualNode' in that)
return that.isEqualNode(other);
// Check general node properties match
//
var props= ['nodeType', 'nodeName', 'localName', 'namespaceURI', 'prefix', 'nodeValue'];
for (var i= props.length; i-->0;)
if (that[props[i]]!==other[props[i]])
return false;
// Check element attributes match
//
if (that.nodeType===1) {
if (that.attributes.length!==other.attributes.length)
return false;
for (var i= that.attributes.length; i-->0;)
if (!Node_isEqualNode(that.attributes[i], other.getAttribute(that.attributes[i].name)))
return false;
}
// Check children match, recursively
//
if (that.childNodes.length!==other.childNodes.length)
return false;
for (var i= that.childNodes.length; i-->0;)
if (!Node_isEqualNode(that.childNodes[i], other.childNodes[i]))
return false;
return true;
}
Обратите внимание, что тестирование дополнительных свойств DocumentType
не требуется, как того требует DOM Level 3 Core.Вы можете добавить это довольно легко, но тогда поддержка браузером таких вещей, как entities
, все равно будет довольно слабой.