* * @param {string} tag * @param {object} attributes * @param {string | Array } classes * @param {string | Node | Array } * @returns {HTMLElement}
(tagName, attributes, classes, textOrElements)
| 703 | * @returns {HTMLElement} |
| 704 | */ |
| 705 | function createElement(tagName, attributes, classes, textOrElements) { |
| 706 | const element = document.createElement(tagName) |
| 707 | if (attributes) { |
| 708 | Object.entries(attributes).forEach(([key, value]) => { |
| 709 | if (value !== undefined && value !== null) { |
| 710 | element.setAttribute(key, value) |
| 711 | } |
| 712 | }) |
| 713 | } |
| 714 | if (classes) { |
| 715 | ; (Array.isArray(classes) ? classes : [classes]).forEach((className) => element.classList.add(className)) |
| 716 | } |
| 717 | if (textOrElements) { |
| 718 | const children = Array.isArray(textOrElements) ? textOrElements : [textOrElements] |
| 719 | children.forEach((textOrElem) => { |
| 720 | if (textOrElem instanceof Node) { |
| 721 | element.appendChild(textOrElem) |
| 722 | } else { |
| 723 | element.appendChild(document.createTextNode(textOrElem)) |
| 724 | } |
| 725 | }) |
| 726 | } |
| 727 | return element |
| 728 | } |
| 729 | |
| 730 | /** |
| 731 | * Add a listener for arrays |
no test coverage detected