actualize
Version:
DOM patching algorithm
37 lines (35 loc) • 799 B
JavaScript
/**
* @param {*|Element} nodeA
* @param {*|Element} nodeB
*/
function setAttrs(nodeA, nodeB) {
const names = new Set
let attr, value
for(attr of nodeA.attributes) {
names.add(attr.name)
value = nodeB.getAttribute(attr.name)
if(value === null) {
nodeA.removeAttribute(attr.name)
continue
}
if(attr.value !== value) {
attr.value = value
}
}
for(attr of nodeB.attributes) {
if(!names.has(attr.name)) {
nodeA.setAttribute(attr.name, attr.value)
}
}
switch(nodeA.tagName) {
case 'OPTION':
nodeA.selected = nodeB.selected
break
case 'INPUT':
nodeA.checked = nodeB.checked
nodeA.indeterminate = nodeB.indeterminate
case 'TEXTAREA':
nodeA.value = nodeB.value
}
}
module.exports = setAttrs