check is dropped and is removed by ancestors instead of only check parent

This commit is contained in:
Yanzhen Yu
2026-04-01 12:00:00 +08:00
parent 9d7a75de7d
commit 56aca3c2b7

View File

@@ -131,13 +131,31 @@ function initMutationObserver(cb: mutationCallBack): MutationObserver {
return remove;
});
const isDropped = (n: Node): boolean => {
const { parentNode } = n;
if (!parentNode) {
return false;
}
if (dropped.some(d => d === parentNode)) {
return true;
}
return isDropped(parentNode);
};
const isRemoved = (n: Node): boolean => {
const { parentNode } = n;
if (!parentNode) {
return false;
}
const parentId = mirror.getId((parentNode as Node) as INode);
if (removes.some(r => r.id === parentId)) {
return true;
}
return isRemoved(parentNode);
};
Array.from(addsSet).forEach(n => {
const parentId = mirror.getId((n.parentNode as Node) as INode);
if (
parentId &&
!dropped.some(d => d === n.parentNode) &&
!removes.some(r => r.id === parentId)
) {
if (!isDropped(n) && !isRemoved(n)) {
adds.push({
parentId: mirror.getId((n.parentNode as Node) as INode),
previousId: !n.previousSibling