While I love the simplicity of the function, there is one workaround  
that I think needs to be considered.  IE does not allow the 'name'  
attribute to be changed after createElement() is called.

To quote MSDN: "The NAME attribute cannot be set at run time on  
elements dynamically created with the createElement method."

Workarounds have been posted here:

May I suggest the following:

function Element(tagName, options) {
        var el = null;
        if (options.name) {
                try {
                        document.createElement('<'+ tagName +' 
                        delete options.name;
                } catch () {} //fails if not IE
        el = el  || document.createElement(tagName)); //create if null
         return Element.extend(el).writeAttributes(options || {});


On Feb 6, 2007, at 7:56 AM, Mislav Marohnić wrote:

> Andrew: that two features bring us back to Dan's or mine  
> implementations and take out the lightweightness of Martin's  
> elegant solution.
> Martin: by all means, submit a patch with tests on the already  
> existing ticket:
> http://dev.rubyonrails.org/ticket/7476#comment:1
> Doing so will enable easy reviewing and comparing.
> -m
> On 2/6/07, Andrew Dupont <[EMAIL PROTECTED]> wrote:
> Martin, I like your implementation a lot (especially the
> Element.writeAttributes idea, which I think should be added no matter
> what) but it's missing two things I like most about Dan Webb's
> DOMBuilder:
> * Tags as method names.  Much easier to do x.DIV(foo, bar) than to do
> new Element("div", foo, bar).
> * Easy nesting (like "x.DIV( x.P ( x.SPAN() ) )").  DOMBuilder
> responds differently based on the number and types of arguments
> passed.
> >

You received this message because you are subscribed to the Google Groups 
"Prototype: Core" group.
To post to this group, send email to prototype-core@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 

Reply via email to