create() {
			const html = arguments[0];
			let attr = arguments[1];
			let data = arguments[2];
			let elem;

			if (!(attr instanceof Object) || Array.isArray(attr))
				data = attr, attr = null;

			if (Array.isArray(html)) {
				elem = document.createDocumentFragment();
				for (let i = 0; i < html.length; i++)
					elem.appendChild(this.create(html[i]));
			}
			else if (this.elem(html)) {
				elem = html;
			}
			else if (html.charCodeAt(0) === 60) {
				elem = this.parse(html);
			}
			else {
				elem = document.createElement(html);
			}

			if (!elem)
				return null;

			this.attr(elem, attr);
			this.append(elem, data);

			return elem;
		}
Creates a new DOM `Node` from the given `html`, `attr` and
`data` parameters.

This function has multiple signatures, it can be either invoked
in the form `create(html[, attr[, data]])` or in the form
`create(html[, data])`. The used variant is determined from the
type of the second argument.

@instance
@memberof LuCI.dom
@param {*} html
Describes the node to create.

When the value of `html` is of type array, a `DocumentFragment`
node is created and each item of the array is first converted
to a DOM `Node` by passing it through `create()` and then added
as child to the fragment.

When the value of `html` is a DOM `Node` instance, no new
element will be created but the node will be used as-is.

When the value of `html` is a string starting with `<`, it will
be passed to `dom.parse()` and the resulting value is used.

When the value of `html` is any other string, it will be passed
to `document.createElement()` for creating a new DOM `Node` of
the given name.

@param {Object<string, *>} [attr]
Specifies an Object of key, value pairs to set as attributes
or event handlers on the created node. Refer to
{@link LuCI.dom#attr dom.attr()} for details.

@param {*} [data]
Specifies children to append to the newly created element.
Refer to {@link LuCI.dom#append dom.append()} for details.

@throws {InvalidCharacterError}
Throws an `InvalidCharacterError` when the given `html`
argument contained malformed markup (such as not escaped
`&` characters in XHTML mode) or when the given node name
in `html` contains characters which are not legal in DOM
element names, such as spaces.

@returns {Node}
Returns the newly created `Node`.