Precise DOM morphing
morphing typescript dom
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #4 from joeldrapper/improve-populate-idmap-for-node

Improve `populateIdMapForNode`

authored by

Joel Drapper and committed by
GitHub
f146c16f f3ccb04c

+17 -14
+9 -7
dist/morphlite.js
··· 81 81 morphNodes(child, guide, idMap); 82 82 } 83 83 function populateIdMapForNode(node, idMap) { 84 - const parent = node.parentElement; 85 - const elements = node.querySelectorAll("[id]"); 86 - for (const element of elements) { 87 - if (element.id === "") 84 + const elementsWithIds = node.querySelectorAll("[id]"); 85 + for (const elementWithId of elementsWithIds) { 86 + const id = elementWithId.id; 87 + if (id === "") 88 88 continue; 89 - let current = element; 90 - while (current && current !== parent) { 89 + let current = elementWithId; 90 + while (current) { 91 91 const idSet = idMap.get(current); 92 - idSet ? idSet.add(element.id) : idMap.set(current, new Set([element.id])); 92 + idSet ? idSet.add(id) : idMap.set(current, new Set([id])); 93 + if (current === elementWithId) 94 + break; 93 95 current = current.parentElement; 94 96 } 95 97 }
+8 -7
src/morphlite.ts
··· 75 75 } 76 76 77 77 function populateIdMapForNode(node: ParentNode, idMap: IdMap): void { 78 - const parent: HTMLElement | null = node.parentElement; 79 - const elements: NodeListOf<Element> = node.querySelectorAll("[id]"); 78 + const elementsWithIds: NodeListOf<Element> = node.querySelectorAll("[id]"); 80 79 81 - for (const element of elements) { 82 - if (element.id === "") continue; 83 - let current: Element | null = element; 80 + for (const elementWithId of elementsWithIds) { 81 + const id = elementWithId.id; 82 + if (id === "") continue; 83 + let current: Element | null = elementWithId; 84 84 85 - while (current && current !== parent) { 85 + while (current) { 86 86 const idSet: IdSet | undefined = idMap.get(current); 87 - idSet ? idSet.add(element.id) : idMap.set(current, new Set([element.id])); 87 + idSet ? idSet.add(id) : idMap.set(current, new Set([id])); 88 + if (current === elementWithId) break; 88 89 current = current.parentElement; 89 90 } 90 91 }