アプリ版:「スタンプのみでお礼する」機能のリリースについて

var list = document.getElementsByTagName('div');

alert(list.item(0).id); ←div要素のid属性の値が表示される
alert(list.item[0].id); ←FireFoxでは、has no property エラーが出る

配列のIndex指定としては、後者が妥当な気がするのですが、
なぜこの場合は丸括弧で期待される結果が出るのでしょうか?

itemという関数を引数0で指定した結果のプロパティ"id"のように
見えるのですが...。

A 回答 (5件)

item()はどうやらArray()ではなくDOMに関するメソッドの様ですね。


MacIE、iCabでもサポートしている様でした。

動作の違いは、item()の引数に文字列を指定すると、
IEとOperaではそのノードのID、またはNAMEと引数が一致するモノを取得出来ますが、
Netscape8.1とFirefoxでは取得出来ず。parseIntできないため引数を0として扱っている?
SafariとiCabは動作停止。

<input type="text" name="input1" id="input1" value="hello">
<input type="text" name="input2" id="input2" value="world">
<script>
var ilist=document.getElementsByTagName('input');
var itm=ilist.item('input2');
alert(itm.value);
// Fxでは"hello"
// IE、Operaでは"world"
</script>

style.filtersはIEしか使えないので、style.filters.item('フィルター名') は問題なさそうです。

IDを指定できればgetElementsByTagNameとitem()の併用で使い勝手がよくなると思ったんですが、
FxとSafariで動かないとちょっと、、、
    • good
    • 0

HTMLTableElementのcells[0]とcells.item(0)とか、


style.filters[0]とstyle.filters.item(0)くらいしか知りません。
getElementsByTagNameの戻り値でも使えるのは知りませんでした。
とすると、item()はArrayオブジェクトのメソッドでしょうか?

私の知る限りでは、
list[0]
list.item(0)
のどちらかで、list.item[0]という使い方はできません。

style.filtersのみitem()を使って、それ以外(テーブルも)は普通の配列として[]を使っていますが、
配列として扱うのは、list.lengthの関係で都合がいいというか、見やすいんですよね。
filters.itemには数値ではなく'DXImageTransform.Microsoft.Alpha'など、文字列で指定出来るのがいいのです。

どっちが推奨されてるとか、どちらかをサポートしていないブラウザがある・ないとか、
あるんでしょうか?(便乗質問すみません)
    • good
    • 0
この回答へのお礼

会社の先輩に確認したところ、

itemは正しくメソッドであり、item(0)は紛れも無く関数呼び出しだそうです。で、その戻り値がNodeListだから、そのオブジェクトを受け取った上で、.演算子がそのプロパティを連結してalertで表示できる。

との事でした。
ブラウザどうこう、という話では、やはりないそうです。
自己解決すみません。

更なる有識者のアドバイスを求めて、もう少し質問はOPENしておきます。

お礼日時:2007/05/17 10:35

本当にそのような動きをするブラウザがあるなら、document.getElementsByTagName('div')で作られた配列にitemと言うメソッドがあるか無いかの違いだけじゃないでしょうか。


こんなイメージのことをブラウザが勝手にやってくれているがどうかの違いじゃないでしょうか。
window.onload=function(){
var list = document.getElementsByTagName('div');
list.item = function(n){
return this[n];
}
alert(list.item(0).id)

list.item = list//これって凄く無駄なプロパティですね。
alert(list.item[0].id)
}
</script>

一応DOMでもitemはメソッドのようです。
http://72.14.235.104/search?q=cache:4DIsFp0867UJ …

javascriptでitemと言うプロパティがあるかどうかは知りません。
    • good
    • 0

実際にNetscape 7(Gecko 1.4)と8(Gecko 1.7)とSeaMonkey1.1(Gecko 1.8.1)とOperaで実験してみましたが結果は全て同じ。

エラーになりました。
(SeaMonkey1.1はシステムのバージョンがFirefox2.0と同じなのでスクリプトの解釈もほとんど同じです。)
エラー: list.item[0] has no properties

と言うことは()が正しいということですね。今回の場合。
理由などの詳しいことは…どうなんだろう(調べてるけどよく分からない)
    • good
    • 0

JavaScriptの解釈はブラウザ次第ですので、FireFoxの仕様です、としか言いようがないと思います。


IEやネスケでは"[0]"で問題ないと思いますが…

この回答への補足

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

()や[]といった構文の根本を成す部分が、実装によってブレたりするものなのでしょうか...??

そうだ、と言われれば納得するしかないですが、
ちょっと腑に落ちないので、質問させていただきました。

他の解釈があれば、ぜひご教授お願いいたします。

補足日時:2007/05/16 14:14
    • good
    • 0

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