2009/6/22 Elit <elitbac...@gmail.com>:
>
> Earlier today I ran into a little problem.
> I have this XHTML page which I create with an XML/XSL transformation.
> When the page is loaded, I tried to add an element to it using
> prototype's 'new Element()'. That created an element which I could add
> to the page, but after that I could not get a reference to it with the
> $() function, nor could I call new Element().update() because
> apparently the object didn't get extended. (This occured in Firefox 3
> and Safari 3.2. using prototype 1.6.1_rc3, IE 6 & 8 worked as
> expected)
>
> I found out that the element got added with an empty xmlns attribute
> and I concluded that it was a namespace issue. I tried fixing it by
> calling 'new Element(tagname, { xmlns: 'http://www.w3.org/1999/
> xhtml'}) to match my document's namespace, but that didn't solve the
> problem. I ended up tweaking the Element function so it would use
> document.createElementNS if needed and available (IE doesn't support
> it, but luckily doesn't need it either.)
>
> global.Element = function(tagName, attributes) {
>    attributes = attributes || { };
>    tagName = tagName.toLowerCase();
>    var cache = Element.cache;
>    var ns = attributes.xmlns || false;    // ADDED
>    if (ns) delete attributes.xmlns;    // ADDED
>    if (SETATTRIBUTE_IGNORES_NAME && attributes.name) {
>      tagName = '<' + tagName + ' name="' + attributes.name + '">';
>      delete attributes.name;
>      if(ns && document.createElementNS) { // ADDED
>        return Element.writeAttribute(document.createElementNS(ns,
> tagName), attributes);
>      }
>      return Element.writeAttribute(document.createElement(tagName),
> attributes);
>    }
>    if (!cache[tagName]) {
>      if(ns && document.createElementNS) {  //ADDED if/else
>        cache[tagName] = Element.extend(document.createElementNS(ns,
> tagName));
>      }
>      else {
>        cache[tagName] = Element.extend(document.createElement
> (tagName));
>      }
>    }
>    return Element.writeAttribute(cache[tagName].cloneNode(false),
> attributes);
>  };
>
>
> So, if I now call new Element(tagName, { xmlns: 'http://www.w3.org/
> 1999/xhtml'}) everything works as expected, and nothing seems broken
> (If I had a nickel every time I heard that hehe)
>
> Don't know if you want to or should add this to Prototype, but I
> thought I'd just post it in case someone runs into the same problem.
>
> >
>

For the majority, should the namespace be defaulted to
'http://www.w3.org/1999/xhtml' if it is not supplied?

My thinking is if this is the default namespace, then the default
namespace should be used when using new Element().

Maybe?



-- 
-----
Richard Quadling
Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
"Standing on the shoulders of some very clever giants!"

--~--~---------~--~----~------------~-------~--~----~
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 
prototype-core-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/prototype-core?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to