Поскольку они выделяют родительский узел любого узла, который был удален:
const sentence = 'click to remove last text node';
root2.append.apply(root2, [...sentence]);
onclick = e => {
lastNode = root2.childNodes[ root2.childNodes.length - 1 ];
if(lastNode) lastNode.remove();
};
<div id="root1">
<div id="root2"></div>
</div>
Они также выделяют любой узел, который становится parentNode, так как они подсвечивают любой свернутый узел, в который добавляется новый узел:
(async function loop() {
root2.append("first node insertion highlights the new parentNode");
await wait(1000);
// removal does too, as shown in previous snippet
[...root2.childNodes].forEach(node => node.remove());
await wait(1000);
loop();
})();
function wait(ms) { return new Promise(res => setTimeout(res, ms)); }
<div id="root1">
<div id="root2"></div>
</div>
Таким образом, когда вы изменяете, изменяете innerHTML
вашего Элемента, происходят обе эти ситуации:
- сначала все его содержимое удаляется => выделение,
- , тогда ваш элемент становится parentNode (снова) => выделение.