@@ -503,14 +503,24 @@ class LazyResult {
503503
504504 if ( visit . iterator !== 0 ) {
505505 let iterator = visit . iterator
506+ // Advance past the child we just finished visiting. Like
507+ // `Container#each`, the index is incremented only after a child has
508+ // been fully processed, so a node inserted right after the current
509+ // child is not skipped by the `existIndex < index` adjustment in
510+ // `Container#insertAfter()` (which would fire exit events too early).
511+ if ( visit . descending ) {
512+ visit . descending = false
513+ node . indexes [ iterator ] += 1
514+ }
506515 let child
507516 while ( ( child = node . nodes [ node . indexes [ iterator ] ] ) ) {
508- node . indexes [ iterator ] += 1
509517 if ( ! child [ isClean ] ) {
510518 child [ isClean ] = true
519+ visit . descending = true
511520 stack . push ( toStack ( child ) )
512521 return
513522 }
523+ node . indexes [ iterator ] += 1
514524 }
515525 visit . iterator = 0
516526 delete node . indexes [ iterator ]
@@ -548,12 +558,22 @@ class LazyResult {
548558
549559 if ( visit . iterator !== 0 ) {
550560 let iterator = visit . iterator
561+ // Advance past the child we just finished visiting. Like
562+ // `Container#each`, the index is incremented only after a child has
563+ // been fully processed. Incrementing before (as this loop used to)
564+ // makes a node inserted right after the current child get skipped by
565+ // the `existIndex < index` adjustment in `Container#insertAfter()`,
566+ // which fires exit events before those new siblings are visited.
567+ if ( visit . descending ) {
568+ visit . descending = false
569+ visitNode . indexes [ iterator ] += 1
570+ }
551571 let child
552572 let descended = false
553573 while ( ( child = visitNode . nodes [ visitNode . indexes [ iterator ] ] ) ) {
554- visitNode . indexes [ iterator ] += 1
555574 if ( ! child [ isClean ] ) {
556575 child [ isClean ] = true
576+ visit . descending = true
557577 stack . push ( {
558578 eventIndex : 0 ,
559579 events : getEvents ( child ) ,
@@ -563,6 +583,7 @@ class LazyResult {
563583 descended = true
564584 break
565585 }
586+ visitNode . indexes [ iterator ] += 1
566587 }
567588 if ( descended ) continue
568589 visit . iterator = 0
0 commit comments