人生最悪の忘れ物

ある要素にアクセスする場合、

例えば、

document.form1.hoge;てしたり、
document.getElementsByName('hoge');てしたり、
jQueryを使ったりする方法があるかと思うのですが、

このgetElementsByName()メソッドは、
javascriptではないのでしょうか?

調べると、
DOMのAPIとかって、書いてあるのですが、
XMLとか、JSONみたいな、単なる仕様なのでしょうか?
そうすると、PHPとかでも、getElementsByNameは使えるのでしょうか?

あるいは、javascriptに特化したメソッドなのでしょうか?


javascriptを書くとき、
書き方が色々あるので、
どれを選択すればよいかいつも迷うのですが、

DOMを使ってできる処理は、
一般的には、DOMで書くのでしょうか?

DOMのデメリットとしては、
古いブラウザが対応してない、ぐらいしか思い浮かばないのですが、

DOMとjavascriptは対等な関係で、
使わなくてもいいけど、
使ったほうが便利、みたいな認識でいいのでしょうか?

DOMでしかできない処理みたいなのはあるのでしょうか?

A 回答 (3件)

まず、JavaScript にはネイティブオブジェクト(≒組み込みオブジェクト)という、JavaScript エンジンなら必ず持っていなければならないものがあります。



Object
 Array
 Boolean
 Date
 Error
 Function
 Math
 Number
 RegExp
 String

これらは new Date、new Array などの形でよく目にするでしょう。

それ以外に、JavaScript エンジンはホスト(実行環境)が提供するホストオブジェクトを使うこともできます。ブラウザをホストとして JavaScript を実行するとき、HTML/XML を操作するためのホストオブジェクトが提供されます。それが DOM です。

Node
 Element
  HTMLElement
   HTMLAnchorElement
   HTMLBodyElement
   ...
 Attr
 Text
 Comment
 Document
 DocumentFragment
 ...
Window

これらは createElement、createDocument のような形で目にしたことがあるでしょう。この仕様自体は JavaScript に限らず、どの言語でも使えるように設計されています(だから、JavaScript の new ではなく、createElement のようにして作られるのです)。

---
DOM の中にも、公式に定義されたものと、ブラウザの独自拡張があります。しかし、「古いブラウザ」が持っていたものの多くは DOM の HTML モジュールとしてほぼ網羅されています(最近話題の HTML5 の別名は、DOM5 HTML です)。document.forms["form1"].elements["hoge"]、document.getElementsByName は、どちらも DOM の HTML モジュールで定義されています。

「書き方がいろいろある」と言いますが、場面に応じた適切な書き方はそんなに多くありません。「ブラウザごとに違いが大きい」とも言われますが、普通に使う分にはまず問題になりません。

このような意見のほとんどは、単に、より標準的な(サポートされる可能性が高い)ものと、独自拡張(特定のブラウザに特化したもの)の区別がついていないために、必要もないのに独自拡張に手を出して、その結果失敗しているだけです。「ブラウザごとのサポート状況」しか見ない人に、この手の失敗が多いです。

jQuery はネイティブオブジェクトや DOM の単なるラッパー(よく使う手順をまとめたりしたもの)ですので、DOM でできないことは jQuery でもできません。jQuery は魔法の小箱ではありません。

この回答への補足

回答ありがとうございます。

>公式に定義されたものと
公式というのは、どこで定義されたものが公式とみなされるのでしょうか?

>ブラウザの独自拡張
IEという理解でよいでしょうか?
IE以外にもブラウザの独自拡張というのはあるのでしょうか?

回答を拝見する限り、
JavaScriptには、
「ネイティブオブジェクト」と「ホストオブジェクト」があって、
ホストオブジェクトがDOMという風に捉えられるのですが、
そういう理解であってるのでしょうか?

手元にある本だと
「ビルトインオブジェクト」と、
「ナビゲータープロジェクト(ブラウザが独自に持っている情報など)」と、
「DOM」を並列に扱っているのですが…

補足日時:2011/06/05 21:00
    • good
    • 0

DOMは仕様(XML、HTMLの要素のアクセスするための仕様)なので、JavaScriptだけでなく他の言語からも使えます。

使い方・メソッド名(関数名)は、言語によって違いますが。

この回答への補足

回答ありがとうございます。

>使い方・メソッド名(関数名)は、言語によって違いますが
それは、誰がどこで決めているのでしょうか?
例えば、PHPなら、下記になるのでしょうか?
http://www.php.net/manual/ja/book.dom.php

また、JavaScriptなら、どこになるのでしょうか?

補足日時:2011/06/05 20:49
    • good
    • 0

DOMはXMLにアクセスするための規格です。


もちろんPHP、VB.netでも同じように使えます。
 PHPのDOMの説明:http://www.php.net/manual/ja/book.dom.php

DOM自体はそれほど新しい規格ではなく「E4X」という規格も出ています。
FirefoxのjavascriptはE4Xを対応しているはずです。
またFlashで使われている言語as2からas3の変わったときにDOMからE4Xになりました。

この回答への補足

回答ありがとうございました。
「E4X」という規格は、初めて聞きました。

>FirefoxのjavascriptはE4Xを対応しているはずです
DOMと、「E4X」には互換性があるのでしょうか?

補足日時:2011/06/05 20:45
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!