[xml-users 9339] Ajaxに似ているが、そうではない事例
えーと。
新しく作成したXML文書でDOM HTMLを使う

そしてcreateElementするDocumentがHTMLDocumentでなくても、XHTML名前空間をもつ要素は全てHTMLElementのインスタンスとして生成される、みたい。window.documentとは縁もゆかりもないDOMParser由来のDocumentを生成して、展開名"http://www.w3.org/1999/xhtml" + "a" の要素をcreateElementNSしてみたところ、HTMLAnchorElementのインスタンスだった。もちろんFirefox前提で、仕様にはこの辺りの挙動について何も書かれていない。と思う。

var doc = (new DOMParser).parseFromString("<doc/>", "application/xml");
var elmA = doc.createElementNS("http://www.w3.org/1999/xhtml", "a");
alert(elmA instanceof HTMLAnchorElement); // true

XHTML名前空間を持っているということが、HTMLElementとして認識される鍵となっているようだけれども、それってどうなんだろう。DOM HTMLには「レガシー」なアトリビュートが沢山あるし、application/xhtml+xmlな文書でDOM HTMLを使っちゃいかんというか、少なくとも動作の保障はされない筈。昨日も書いたけれども、DOM HTMLはレガシーHTMLの為のインターフェイスなんだし。

……気にしない気にしない。

因みにElement、HTMLElement、HTMLAnchorElementという階層。HTMLElementはhtml要素を抽象化するものではないのがややこしいので一応。