@@ -349,30 +349,40 @@ export default class SplitText {
349349 }
350350 } else {
351351 // Regular handling for non-CJK text or when handleCJK is false
352- const words = contents . split ( splitOn ) ;
353- let i = 0 ,
354- splitText ;
355-
356- const recursiveSupportNBSpaces = ( ) => {
357- if ( key === 'char' ) return ;
358- let matched = false ;
359- const charAt = contents . charAt ( contents . indexOf ( splitText ) + splitText . length ) ;
360- const space = NBSPACES . find ( ( s ) => s === charAt ) ;
361- if ( space ) {
362- splitText = splitText . concat ( space ) . concat ( words [ ++ i ] ) ;
363- matched = true ;
352+ if ( key === 'char' ) {
353+ // Use Array.from to properly split Unicode characters including emojis
354+ const chars = Array . from ( contents ) ;
355+ chars . forEach ( ( char ) => {
356+ const splitEl = this . createElement ( parentEl , key , char ) ;
357+ elements . push ( splitEl ) ;
358+ allElements . push ( splitEl ) ;
359+ } ) ;
360+ } else {
361+ const words = contents . split ( splitOn ) ;
362+ let i = 0 ,
363+ splitText ;
364+
365+ const recursiveSupportNBSpaces = ( ) => {
366+ if ( key === 'char' ) return ;
367+ let matched = false ;
368+ const charAt = contents . charAt ( contents . indexOf ( splitText ) + splitText . length ) ;
369+ const space = NBSPACES . find ( ( s ) => s === charAt ) ;
370+ if ( space ) {
371+ splitText = splitText . concat ( space ) . concat ( words [ ++ i ] ) ;
372+ matched = true ;
373+ }
374+ contents = contents . substring ( contents . indexOf ( splitText ) ) ;
375+ if ( matched ) return recursiveSupportNBSpaces ( ) ;
376+ } ;
377+
378+ for ( ; i < words . length ; i ++ ) {
379+ splitText = words [ i ] ;
380+ if ( i && preserveWhitespace ) allElements . push ( document . createTextNode ( ' ' ) ) ;
381+ recursiveSupportNBSpaces ( ) ;
382+ const splitEl = this . createElement ( parentEl , key , splitText ) ;
383+ elements . push ( splitEl ) ;
384+ allElements . push ( splitEl ) ;
364385 }
365- contents = contents . substring ( contents . indexOf ( splitText ) ) ;
366- if ( matched ) return recursiveSupportNBSpaces ( ) ;
367- } ;
368-
369- for ( ; i < words . length ; i ++ ) {
370- splitText = words [ i ] ;
371- if ( i && preserveWhitespace ) allElements . push ( document . createTextNode ( ' ' ) ) ;
372- recursiveSupportNBSpaces ( ) ;
373- const splitEl = this . createElement ( parentEl , key , splitText ) ;
374- elements . push ( splitEl ) ;
375- allElements . push ( splitEl ) ;
376386 }
377387 }
378388
0 commit comments