JSFiddle - React, Tailwind, and code Playground

JavaScript

function walk(node, fn) {
    if (node) {
        var child = node.firstChild;
        while (child) {
            if (fn(child)) return true;
            if (walk(child, fn)) return true;
            child = child.nextSibling
        }                    
    }
}

function sub_html_str(str, num){
    var tmpEle = document.createElement('div');
    tmpEle.innerHTML = str;
    
    walk(tmpEle, function(node) {
        if (node.nodeType === 3) {
           var value = node.nodeValue;
            if (num > 0) {
              if (value.length <= num) {
                 num -= value.length;                                                                                            
              } else {
                 node.nodeValue = value.substr(0, num);
                 num = 0;
              }
             } else {
                var parent = node.parentNode;
                parent.removeChild(node);
                if (!parent.firstChild) {
                  parent.parentNode.removeChild(parent);
                }
             }
        }            
    });
 
    return tmpEle.innerHTML;
}
         
function sub_html_str_rset(str, num) {
    var tmpEle = document.createElement('div');
    tmpEle.innerHTML = str;
    
    walk(tmpEle, function(node) {
        if (node.nodeType === 1) {
            console.log(node);
            if (!node.firstChild) {
                node.parentNode.removeChild(node);
            }   
        } else if (node.nodeType === 3) {
           var value = node.nodeValue;
            if (num > 0) {
              if (value.length <= num) {
                 var parent = node.parentNode;
                 parent.removeChild(node);
                 if (!parent.firstChild) {
                    parent.parentNode.removeChild(parent);
                 }     
                 num -= value.length;                   
              } else {
                 node.nodeValue = value.substr(num);
                 num = 0;
              }
          ...