@@ -183,8 +183,9 @@ export const enum VNodeJournalOpCode {
183
183
SetText = 1 , // ------ [SetAttribute, target, text]
184
184
SetAttribute = 2 , // - [SetAttribute, target, ...(key, values)]]
185
185
HoistStyles = 3 , // -- [HoistStyles, document]
186
- Remove = 4 , // ------- [Insert, target(parent), ...nodes]
187
- Insert = 5 , // ------- [Insert, target(parent), reference, ...nodes]
186
+ Remove = 4 , // ------- [Remove, target(parent), ...nodes]
187
+ RemoveAll = 5 , // ------- [RemoveAll, target(parent)]
188
+ Insert = 6 , // ------- [Insert, target(parent), reference, ...nodes]
188
189
}
189
190
190
191
export type VNodeJournal = Array <
@@ -968,6 +969,15 @@ export const vnode_applyJournal = (journal: VNodeJournal) => {
968
969
idx ++ ;
969
970
}
970
971
break ;
972
+ case VNodeJournalOpCode . RemoveAll :
973
+ const removeAllParent = journal [ idx ++ ] as Element ;
974
+ if ( removeAllParent . replaceChildren ) {
975
+ removeAllParent . replaceChildren ( ) ;
976
+ } else {
977
+ // fallback if replaceChildren is not supported
978
+ removeAllParent . textContent = '' ;
979
+ }
980
+ break ;
971
981
case VNodeJournalOpCode . Insert :
972
982
const insertParent = journal [ idx ++ ] as Element ;
973
983
const insertBefore = journal [ idx ++ ] as Element | Text | null ;
@@ -1220,8 +1230,7 @@ export const vnode_truncate = (
1220
1230
) => {
1221
1231
assertDefined ( vDelete , 'Missing vDelete.' ) ;
1222
1232
const parent = vnode_getDomParent ( vParent ) ;
1223
- const children = vnode_getDOMChildNodes ( journal , vDelete ) ;
1224
- parent && children . length && journal . push ( VNodeJournalOpCode . Remove , parent , ...children ) ;
1233
+ parent && journal . push ( VNodeJournalOpCode . RemoveAll , parent ) ;
1225
1234
const vPrevious = vDelete . previousSibling ;
1226
1235
if ( vPrevious ) {
1227
1236
vPrevious . nextSibling = null ;
0 commit comments