docs: function parseMarkup(children) {
      const nodeList = children;
      const cstList = [];
  
      if (typeof nodeList.length === 'undefined') {
        throw new TypeError('Invalid Argument');
      }
  
      for (let i = 0, li = nodeList.length; i < li; i++) {
        if (nodeList[i] instanceof HTMLElement && nodeList[i].tagName.toUpperCase() === 'OPTGROUP') {
          const cstOptgroup = document.createElement('div');
          cstOptgroup.classList.add(builderParams.optgroupClass);
          cstOptgroup.setAttribute('data-label', nodeList[i].label);
  
          // IMPORTANT: Stores in a property of the created custom option group
          // a hook to the the corrisponding select's option group
          cstOptgroup.customSelectOriginalOptgroup = nodeList[i];
  
          // IMPORTANT: Stores in a property of select's option group
          // a hook to the created custom option group
          nodeList[i].customSelectCstOptgroup = cstOptgroup;
  
          const subNodes = parseMarkup(nodeList[i].children);
          for (let j = 0, lj = subNodes.length; j < lj; j++) {
            cstOptgroup.appendChild(subNodes[j]);
          }
  
          cstList.push(cstOptgroup);
        } else if (nodeList[i] instanceof HTMLElement
            && nodeList[i].tagName.toUpperCase() === 'OPTION') {
          const cstOption = document.createElement('div');
          cstOption.classList.add(builderParams.optionClass);
          cstOption.textContent = nodeList[i].text;
          cstOption.setAttribute('data-value', nodeList[i].value);
          cstOption.setAttribute('role', 'option');
  
          // IMPORTANT: Stores in a property of the created custom option
          // a hook to the the corrisponding select's option
          cstOption.customSelectOriginalOption = nodeList[i];
  
          // IMPORTANT: Stores in a property of select's option
          // a hook to the created custom option
          nodeList[i].customSelectCstOption = cstOption;
  
          // If the select's option is selected
          if (nodeList[i].selected) {
            setSelectedElement(cstOption);
          }
          cstList.push(cstOption);
        } else {
          throw new TypeError('Invalid Argument');
        }
      }
      return cstList;
    }