align id map by skip extra added nodes

This commit is contained in:
Yanzhen Yu
2026-04-01 12:00:00 +08:00
parent c9bb0e6557
commit e040ae76c5
3 changed files with 41 additions and 5 deletions

View File

@@ -40,9 +40,20 @@ export function getIdNodeMap(doc: Document) {
return null;
}
if (node.type === NodeType.Document || node.type === NodeType.Element) {
for (const _n of Array.from(n.childNodes)) {
walk(_n);
let dataStr: string | null = null;
let extraChildIndexes: number[] = [];
if (node.type === NodeType.Element) {
dataStr = (n as Element).getAttribute('data-extra-child-index');
}
if (dataStr) {
extraChildIndexes = JSON.parse(dataStr);
}
n.childNodes.forEach((childNode, index) => {
// skip extra DOM created when rebuild
if (extraChildIndexes.indexOf(index) < 0) {
walk(childNode);
}
});
}
}
@@ -92,7 +103,10 @@ export function hookSetter<T>(
const original = Object.getOwnPropertyDescriptor(target, key);
Object.defineProperty(target, key, {
set(value) {
d.set!.call(this, value);
// put hooked setter into event loop to avoid of set latency
setTimeout(() => {
d.set!.call(this, value);
}, 0);
if (original && original.set) {
original.set.call(this, value);
}