JSFiddle - React, Tailwind, and code Playground

HTML

<div class="1 2 3 4">
  <div class="2 1 3">
  dfg
    <div class="3">
      <ul>
        <li>
          sdf
        </li>
       </ul> 
       sdfsd
    </div>
  </div>
</div>

JavaScript

function w (){
console.log(document);
var obj = {},
		objClass = {},
    objText = {
    	countText: 0
    };

var el = document.querySelectorAll("*");
	
for(i = 0; i<el.length; i++){
   var tagName = el[i].tagName;
 console.log(el[i].nodeType);
 if(el[i].nodeType === 1){
 
   if(!obj[tagName]){
       obj[tagName] = 1;
   } else {
       obj[tagName]++
   }
 
   if(el[i].hasAttribute('class')){
       var classElements = el[i].classList;
      // console.log(classElements);
     for(var j=0; j<classElements.length; j++){
         var className = classElements[j];
     //console.log(classElements[j]);
       if(!objClass[className]){
         objClass[className] = 1;
       } else{
         objClass[className]++;
       }}
   }
	}
	if(el[i].nodeType == 3){
  	objText[countText] += 1;
    alert('wer');
  }

};

var textNode = el[0].childNodes;

  for ( prop in obj ) {
      if ( obj.hasOwnProperty(prop)) {
          console.log('тегов', prop + ' : ' + obj[prop]);
      }
  };
  for ( propClass in objClass ) {
      if ( objClass.hasOwnProperty(propClass)) {
          console.log('классов', propClass + ' : ' + objClass[propClass]);
      }
  };
  for ( propText in objText ) {
      if ( objText.hasOwnProperty(propText)) {
          console.log('Текстовых узлов', propText + ' : ' + objText[propText]);
      }
  };
  

};
w();