WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:object

0:[投稿] tororo [2004/04/05 12:36 ][環境:IE6 IE6]

<select>タグ中の<option>をオブジェクトとして扱うとき、
obj.options[i].text や
obj.options[i].selectedIndex
というような書き方をしていましたが、
options を省略して
obj[i].text
obj[i].selectedIndex
としても同様の結果が得られることに初めて気づきました。
このような省略形で記述することは望ましいことですか?


1:[回答] Yachimata [2004/04/05 16:30 ]

私的なもので、公開もしないのであれば記述方法に頓着しなくても良いかも知れません。
それでもこだわる、というのであればこだわった記述にすれば良いでしょう。
仕事で作っていて納品するものであればメンテナンス効率やクロスブラウザを考慮する必要があるかも知れません。


要は「TPO に拠るのではないか」と思うのです。


2:[回答] AC [2004/04/05 20:25 ]

こういう場合は、まず仕様書に当たるべきです。

まず、W3C DOMではどうなっているか見ます。リンク先はDOM level 2 HTML(の邦訳)。
インターフェイスHTMLSelectElementを見ます。
http://www2u.biglobe.ne.jp/%7Eoz-07ams/prog/dom-ref/HTML/HTMLSelectElement.html
この要素の下にselectedIndex属性、options属性(コレクション)があります。
options属性はInterface  HTMLOptionsCollectionなので、該当する所を見ます。
http://www2u.biglobe.ne.jp/%7Eoz-07ams/prog/dom-ref/HTML/HTMLOptionsCollection.html
これには、itemメソッドとnamedItemメソッドがあります。それぞれNode型の値を返します。
さらに、インターフェイスHTMLOptionElementを見ると、
http://www2u.biglobe.ne.jp/%7Eoz-07ams/prog/dom-ref/HTML/HTMLOptionElement.html
option要素の下にtext属性があります。selectedIndex属性は存在しません。

つまり、W3C DOM的には、
obj.options.item(i).text
obj.selectedIndex
となります。なお、ECMAScriptにおいては、
http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/ecma-script-binding.html
HTMLOptionsCollection interfaceのitemメソッドは配列でも参照できるとあるので、
obj.options[i].text
としてもよいでしょう。

IEの仕様も見てみます。
SELECT Element | select Object
http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/select.asp
options Collection
http://msdn.microsoft.com/workshop/author/dhtml/reference/collections/options.asp
OPTION Element | option Object
http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/option.asp
先のW3C DOM的な書き方はIEでも問題ない。
なお、IEでは、SELECT .options( vIndex [, iSubIndex ]) という書き方もできます。つまり、
obj.options(i).text
という書き方をしてもよいでしょう。しかし、
obj.options[i].selectedIndex
obj[i].text
obj[i].selectedIndex
という書き方をしてよいという根拠は見当たりません。

ということで、互換性を考えれば、W3C DOM的な書き方
obj.options[i].text
obj.selectedIndex
をするのがよいでしょう。なお、
obj.options[i].selectedIndex
obj[i].text
obj[i].selectedIndex
のような、Microsoftのドキュメントにも根拠の無いような書き方をするのは、他のブラウザはおろか、IEであっても互換性に問題が起きる可能性があります。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World