JSFiddle - React, Tailwind, and code Playground

JavaScript

var Element = (function (win, doc) {

    var init = function () {
        return this;
    }

    init.prototype = {
        first: first,
        prev: prev,
        next: next,
        last: last,
        attr: attr,
        create: create,
        before: before,
        after: after,
        append: append,
        remove: remove
    };

    return new init();




    // Core
    function first(elem) {

        elem = elem || document.documentElement;

        return elem && elem.nodeType === 1 ? elem.firstChild : next(elem);
    };

    function prev(elem) {

        elem = elem || document.documentElement;

        do {
            elem = elem && elem.previousSibling;
        }
        while (elem && elem.nodeType !== 1)

        return elem;
    };

    function next(elem) {

        elem = elem || document.documentElement;

        do {
            elem = elem && elem.nextSibling;
        }
        while (elem && elem.nodeType !== 1)

        return elem;
    };

    function last(elem) {

        elem = elem || document.documentElement;

        return elem && elem.nodeType === 1 ? elem.lastChild : prev(elem);
    };

    // 속성 가져오기/변경하기
    function attr(elem, args, value) {

        elem = elem || document.documentElement;
        args = args || (args && args.constructor === Object ? {} : '');
        value = value || '';

        if (args.constructor === Object) {

            for (var n in args) {

                var t = { 'for': 'htmlFor', 'class': 'className'}[n] || n;

                elem.setAttribute && elem.setAttribute(t, args[n]);
            }

            return elem;
        }
        else if (args.constructor === String) {

            var t = { 'for': 'htmlFor', 'class': 'className'}[args] || args;

            if (value) {
                elem.setAttribute && elem.setAttribute(t, value);

                return elem;
            }
            else {
                return elem.getAttribute && elem.getAttribute(t) ?...