QA@IT

VisualStudioでjavascriptを書いた時のインテリセンスについて

2625 PV

最近になってVisualStudio community 2013を使って、javascriptの勉強を始めた者です。
VisualStudio のインテリセンスについて分からない点があり、質問させていただきます。
例えば

<html>
 <body>
  <input type = "text" id="txt">
 </body>
</html>

上のテキストボックスの値を取りたい場合,javaxscriptに於いて
document.getElementById("txt").value
と、bodyタグ内にscriptを埋め込んで書くと、getElementById(...).の後にインテリセンスが働いて、候補の中に「text」が現れるのですが、script部分をjavascriptファイルに書いた場合、候補の中に「value」が現れません。
候補には現れなくても「.value」と書いて値は取れますが、なぜインテリセンスの候補の中に現れないのかわかりません。

ご教授のほどよろしくお願いします。

回答

詳細な仕様はわかりませんが、idはドキュメント内に唯一存在するので、HTMLファイル内に記載した場合は対象のエレメントを推定できるので、Visual Studioが自動的にそのIDの最初のエレメントのオブジェクトを対象として仮定してくれうからでしょう。

一方外部ファイルにした場合、複数ドキュメントからロードされる可能性があるため対象を仮定することができません。

HTMLファイル内に書いても例えば以下のような不正なドキュメントでは

    <div id="txt" ></div>
    <input type="text" id="txt" />

おそらく先に登場するdivが id=txt のエレメントであると仮定されるため、
document.getElementById('txt')のインテリセンスに valueは表示されませんでした。

もっと言えば javascriptで idを設定したり変更したりもできるので以下のソースで id="txt"となるエレメントを変更した後でもvalueはインテリセンスに現れます(コメントのあたり)。
その段階ではtxtはdivエレメントなので、value属性はありません。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script>
        window.onload = function () {
            document.getElementById("txt").id = "dummy";
            document.getElementById("txt2").id = "txt";  // id="txt"は divになる

            // このあたりでも document.getElementById("txt") のインテリセンスにvalueは出る
            document.getElementById("txt").innerText = "sample";
        }
    </script>
</head><body>
    <div id="txt2" ></div>
    <input type="text" id="txt" />

</body></html>

仮定する事が可能な範囲でインテリセンスを表示してくれている。ということだと思います。

編集 履歴 (1)
  • 教えていただきありがとうございます。
    まだjavascriptを勉強し始めたばかりで、仕様的に間違った書き方なのかと思い質問させていただきました。
    ありがとうございました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。