<html>

<head>
    <style>
        .bigger {
            font-size: 3em;
            font-family: cursive;
        }
        
        .padded {
            padding: 20px;
        }
        
        .borderAdd {
            border: 3px dotted blue;
        }
        
        #main >* {
            border: 1px solid #ddd;
        }
    </style>
</head>

<body> Add Element:
    <select name="addElement"></select>
    <button name="adder">Add</button>
    <br> Select Element
    <select name="eleMaker"></select>
    <br> Inner Text :
    <input type="text" name="outputText" value="Laurence">
    <br> Background :
    <input type="color" name="bg" value="#ffffff">
    <br> Text Color:
    <input type="color" name="txt" value="#000000">
    <br> Toggle Classes
    <select name="classes"></select>
    <br>
    <button class="btn">Update</button>
    <div id="main">
        <div>Hello World</div>
        <p>Laurence</p> <span>JavaScript</span> </div>
    <script>
        const classArray = ["padded", "bigger", "borderAdd"];
        const elementArray = ["div", "p", "span"];
        const selClasses = document.querySelector("select[name=classes]");
        const eleMaker = document.querySelector("select[name=eleMaker]");
        const addElement = document.querySelector("select[name=addElement]");
        const adder = document.querySelector("button[name=adder]");
        const selElement = document.querySelector("div");
        const seInput = document.querySelector("input[name=outputText]");
        const seBg = document.querySelector("input[name=bg]");
        const seTxt = document.querySelector("input[name=txt]");
        const btn = document.querySelector(".btn");
        const main = document.querySelector("#main");
        let nodeLister;
        adder.addEventListener("click", function () {
            let temp = document.createElement(addElement.value);
            temp.textContent = addElement.value;
            temp.addEventListener("click", removeEle);
            main.appendChild(temp);
            dropDownBuilder();
        })
        btn.addEventListener("click", function (event) {
            let tempElement = nodeLister[eleMaker.value];
            tempElement.textContent = seInput.value;
            tempElement.style.backgroundColor = seBg.value;
            tempElement.style.color = seTxt.value;
            tempElement.classList.toggle(selClasses.value);
        })
        document.addEventListener("DOMContentLoaded", function () {
            classArray.forEach(function (item) {
                let opt = document.createElement("option");
                opt.value = item;
                opt.innerHTML = item;
                selClasses.appendChild(opt);
            })
            elementArray.forEach(function (item) {
                let opt = document.createElement("option");
                opt.value = item;
                opt.innerHTML = item;
                addElement.appendChild(opt);
            })
            nodeLister = document.querySelectorAll("#main >*");
            removerElements();
            dropDownBuilder();
        })

        function removerElements() {
            nodeLister.forEach(function (item) {
                item.addEventListener("click", removeEle);
            })
        }

        function removeEle() {
            main.removeChild(this);
            dropDownBuilder();
        }

        function dropDownBuilder() {
            eleMaker.innerHTML = "";
            nodeLister = document.querySelectorAll("#main >*");
            nodeLister.forEach(function (item, index) {
                let opt = document.createElement("option");
                opt.value = index;
                opt.innerHTML = item.tagName;
                eleMaker.appendChild(opt);
            })
        }
    </script>
</body>

</html>