[whatwg] Hacking away on forms ... (fwd)
Dave Raggett
dsr at w3.org
Sun Sep 10 03:17:19 PDT 2006
On Sat, 9 Sep 2006, Anne van Kesteren wrote:
> On Fri, 08 Sep 2006 18:40:34 +0200, Dave Raggett <dsr at w3.org> wrote:
>> p.s. implementing the output element would be a lot cleaner if
>> more browsers supported the /> syntax for empty elements that
>> aren't part of traditional HTML. IE already does so, but Firefox
>> and Opera do not. Firefox is even worse as it coerces the tag
>> name to upper case when you inspect the DOM node it creates!
>> Opera and Firefox also differ over the amount of whitespace text
>> nodes that are set as the content on unknown elements. IE has its
>> own weird worts, although strangely, it works rather nicely for
>> non-html markup in XML namespaces. IE therefore encourages the
>> use of XML namespaces for mixed markup when delivered as
>> text/html.
>
> You sure IE only does this for <foo/> and not also for <foo>? It's
> my understand they are treated as being identical in every single
> browser. Whether or not such an element is treated as empty varies
> from browser to browser.
For traditional HTML elements, IE uses its built-in knowledge of
their content model, along with rules for dealing with malformed
HTML markup.
For other elements the behavior depends upon whether the tag
has a namespace prefix or not.
If the tag doesn't have an XML namespace prefix, then it is
inserted into the DOM as an empty upper case element.
<foo> nodeName = "FOO"
</foo> nodeName = "/FOO"
<foo/> nodeName = "FOO"
The same is true if you define the XML namespace with the
xmlns attribute e.g.
<foo xmlns="http://example.com/ns"/> nodeName="FOO"
BUT if you use a tag with a previously defined XML namespace
then things are different:
<f:foo>hello world</f:foo>
is parsed as a foo element with a text node "hello world" as its
content. The case for the element's tag name is preserved.
if the namespace prefix isn't previously declared then you get:
<f:foo> nodeName = "F:FOO"
</f:foo> nodeName = "/F:FOO"
However, the namespace declaration can leave the URI empty, e.g.
<html xmlns:f="">
is sufficient for IE to avoid giving <f:foo> the empty uppercase
treatment.
It isn't sufficient to define the namespace on the element itself
as in the following example:
<g:fred xmlns:g="">smith</g:fred>
which gets the uppercase empty element treatment. To avoid
that, you need to declare the namespace on the html start tag.
Elements with a declared XML namespace prefix can be styled
with CSS.
Note that my tests were done using a script to walk the DOM
tree and display the results in an alert box.
With a knowledge of the above behavior, web page scripts can
be written clean up the DOM, e.g. placing the tags into the
HTML namespace with a dynamically defined prefix, and fixing
up the content. It's not a show stopper.
> Converting the node name to uppercase also seems like the right
> thing to do for text/html documents although HTML5 might change
> bits of that...
Perhaps.
Another difference between IE and Opera is that Opera includes
the prefix as part of the node name for elements with a previously
declared XML namespace.
None of this is insurmountable by a determined scripter, but we
might perhaps try and aim for closer alignment amongst different
browsers that is currently the case. I am not advocating that
Opera follows IE's upper case/empty element weirdness, rather
that Opera treat <foo/> as an empty element.
Dave Raggett <dsr at w3.org> W3C lead for multimodal interaction
http://www.w3.org/People/Raggett +44 1225 866240 (or 867351)
More information about the whatwg
mailing list