- From: Ian Hickson <ian@hixie.ch>
- Date: Tue, 3 Dec 2013 03:58:20 +0000 (UTC)
- To: "Marat Tanalin | tanalin.com" <mtanalin@yandex.ru>
- cc: "www-dom@w3.org" <www-dom@w3.org>
On Fri, 22 Nov 2013, Marat Tanalin | tanalin.com wrote:
>
> Creating an element via DOM [...]
In my own projects, I've ended up rolling my own function to do this:
E(tagName);
E(tagName, propertiesAndAttributes);
E(tagName, contents...);
E(tagName, propertiesAndAttributes, contents...);
This functions creates an element where:
tagName is a string like 'h1' or 'form', giving the element's type.
(We could support SVG and MathML with tag names of the form "svg:g".)
propertiesAndAttributes is an object whose properties are each
processed as follows:
-- if the value is the boolean false value, it's ignored
-- if the value is the boolean true value, a content attribute with
the same name as the key is set to the empty string
-- if the value is a string, a content attribute with the same name
as the key is set to the given value
-- if the value is a function, the property with the same name is
set to the given value
contents is zero or more of the following, procesed as follows:
-- arrays are processed recursively.
-- nulls are ignored
-- strings are treated as text nodes to append to the element
-- nodes are appended to the element
Thus you can do things like:
E('p', E('label', 'Username: ', E('input', { name: 'username', required: true })));
...as the equivalent of:
<p><label>Username: <input name=username required></label></p>
...or this:
var button = E('button', { onclick: handleClick, disabled: isDisabled },
'Continue');
...as the equivalent of:
var button = document.createElement('button');
button.onclick = handleClick;
if (isDisabled)
button.disabled = true;
button.textContent = document.createTextNode('Continue');
(I also have an F() function that returns a DocumentFragment, which just
takes the equivalent of "contents" above as its arguments.)
Having said that, personally I prefer E4H as a solution to all this.
http://hixie.ch/specs/e4h/strawman
--
Ian Hickson U+1047E )\._.,--....,'``. fL
http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,.
Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
Received on Tuesday, 3 December 2013 03:58:43 UTC