вот кривой код который делает почти то что нужно, дальше сам разбирайся
function addspan(word){
let vari='';
let letters = word.split('');
for(letter of letters)
vari += `<span class='cls'>${letter}<\/span>`;
return vari;
}
function textNodesUnder(node){
var all = [];
for (node=node.firstChild;node;node=node.nextSibling){
if (node.nodeType==3) all.push(node);
else all = all.concat(textNodesUnder(node));
}
return all;
}
nodes=textNodesUnder(document.querySelector('.block'));
nodes.forEach(node => {
tempnode=document.createElement("span");
tempnode.innerHTML=addspan(node.nodeValue);
node.parentElement.replaceChild(tempnode,node);
tempnode.outerHTML=tempnode.innerHTML;
});