DOMImplementationのサンプル

サンプル1

DOM Level 1, 2(と3の一部)の仕様書に書かれているhasFeatureの全パターン
feature version このブラウザ IE6 IE7 Firefox2-3 Opera9 Safari2 Safari3 Konqueror3
HTML 1.0 true 未調査 true true 未調査 true 未調査
XML 1.0 false 未調査 true true 未調査 true 未調査
Core 2.0 false 未調査 true true 未調査 true 未調査
HTML 2.0 false 未調査 true true 未調査 true 未調査
XHTML 2.0 false 未調査 true false 未調査 true 未調査
XML 2.0 false 未調査 true true 未調査 true 未調査
Views 2.0 false 未調査 true true 未調査 true 未調査
Events 2.0 false 未調査 true true 未調査 true 未調査
UIEvents 2.0 false 未調査 true true 未調査 true 未調査
MouseEvents 2.0 false 未調査 true true 未調査 true 未調査
MutationEvents 2.0 false 未調査 false true 未調査 true 未調査
HTMLEvents 2.0 false 未調査 true true 未調査 true 未調査
StyleSheets 2.0 false 未調査 true true 未調査 true 未調査
CSS 2.0 false 未調査 true true 未調査 true 未調査
CSS2 2.0 false 未調査 true true 未調査 true 未調査
Traversal 2.0 false 未調査 false true 未調査 true 未調査
Range 2.0 false 未調査 true true 未調査 true 未調査
Core 3.0 false 未調査 false false 未調査 false 未調査
XMLVersion 1.0 false 未調査 false false 未調査 false 未調査
XMLVersion 1.1 false 未調査 false false 未調査 false 未調査
XML 3.0 false 未調査 false false 未調査 false 未調査
LS 3.0 false 未調査 false true 未調査 false 未調査
LS-Async 3.0 false 未調査 false true 未調査 false 未調査
Validation 3.0 false 未調査 false false 未調査 false 未調査
xpath 3.0 false 未調査 true true 未調査 true 未調査

注:XMLVersionは対応するXMLのバージョンを調べるものとしてLevel 3 Coreで定義されました。

ソース1(一例)

  document.open();
  document.write(document.implementation.hasFeature("HTML","1.0"));
  document.close();

サンプル2

ソース2

function createdoc(){
  if(document.implementation.hasFeature("Core","2.0")){
    newdt = document.implementation.createDocumentType("nazo","-//NoName//DTD NAZO 1.0//JP","http://foo.jp/foo/");
    newdoc = document.implementation.createDocument("http://foo.jp/foo/", "nazo", newdt);
    newdoc.documentElement.appendChild(newdoc.createElement('fumei'));
    for(i=0;i<newdoc.getElementsByTagName('*').length;i++){
      alert("要素"+i+": "+newdoc.getElementsByTagName('*')[i].nodeName);
    }
    alert(newdoc.isSupported("HTML", "2.0"));
  }
}

しかし文書型宣言自体の知識があんまりないんですが、この例は正しいんでしょうか…。

たぶん、以下のXMLと同じものが作れているはずです。

<!DOCTYPE nazo "-//NoName//DTD NAZO 1.0//JP" "http://foo.jp/foo/">
<nazo>
 <fumei>
 </fumei>
</nazo>