JavaScript関係

index

基本事項

コメントアウト

コメントアウトは「//」(単行)、「/* ... */」(複数行可能)

行末

各行末にはセミコロン( ; )を記述。

外部ファイルの指定

JavaScriptのコードをhtmlファイルとは別に作成して呼び出す手順。head要素内にscript要素を置いて記述する。

【htmlファイル】
...
<head>
...
  <script type="text/javascript" src="JavaScriptファイル名"></script>
...
</head>

コードの記述・指定

htmlファイル内に直接JavaScriptコードを記述する書式は以下の通り[2]

<script type="text/javascript">
<!--
// ここにコードを記述する
//-->
</script>
  

JavaScriptコードは、古いブラウザでJavaScriptコードがそのまま表示されてしまわないよう、「<!--」と「//-->」で囲んでhtmlコメントアウトしておく。

外部ファイルにJavaScriptコードを記述し、それを読み込む場合の書式は以下の通り。記載場所は通常 head 要素の中。

<head>
  ...
  <script type="text/javascript" src="読み込みたいJavaScriptファイルのパス"></script>
  ...
</head>
  

演算子

比較演算子、論理演算子は以下の通り7 28 - 演算子 39_05

論理演算子
種別 記述方法 備考・例
論理積(and) &&
【例】
expr1 && expr2
論理和(or) ||
【例】
expr1 || expr2
否定(not) !
【例】
!expr

画面、アドレスなどの情報取得

ウインドウサイズを取得

プロパティ名 内容
window.innerWidth ウインドウ内側の幅
window.innerHeight ウインドウ内側の高さ
window.outerWidth ウインドウ外側の幅
window.outerHeight ウインドウ外側の高さ

マウスポインタの位置

ウェブクライアント情報の取得

内容
navigator.userAgent ユーザエージェント情報 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:12.0) Gecko/20100101 Firefox/12.0
navigator.appName ブラウザ名 Netscape
navigator.appCodeName ブラウザのコード名 Mozilla
navigator.appVersion ブラウザのバージョン 5.0 (Macintosh)
navigator.platform OSプラットフォーム MacIntel
navigator.language ブラウザの使用言語 ja
navigator.plugins ブラウザのプラグイン。各プラグイン情報を要素とする配列。個数はnavigator.plugins.lengthで、各要素はnavigator.plugins[n](nは0〜length-1)

例:

<table class="bordertbl">
  <tr>
    <th>値</th>
    <th>あなたの値</th>
  </tr>
  <tr>
    <td>navigator.userAgent</td>
    <td>
<script type="text/javascript"><!--
document.write(navigator.userAgent);
-->
</script>
    </td>
  </tr>
  <tr>
    <td>navigator.appName</td>
    <td>
<script type="text/javascript"><!--
document.write(navigator.appName);
-->
</script>
    </td>
  </tr>
  <tr>
    <td>navigator.codeName</td>
    <td>
<script type="text/javascript"><!--
document.write(navigator.codeName);
-->
</script>
    </td>
  </tr>
  <tr>
    <td>navigator.appVersion</td>
    <td>
<script type="text/javascript"><!--
document.write(navigator.appVersion);
-->
</script>
    </td>
  </tr>
  <tr>
    <td>navigator.platform</td>
    <td>
<script type="text/javascript"><!--
document.write(navigator.platform);
-->
</script>
    </td>
  </tr>
  <tr>
    <td>navigator.language</td>
    <td>
<script type="text/javascript"><!--
document.write(navigator.language);
-->
</script>
    </td>
  </tr>
  <tr>
    <td>navigator.languages</td>
    <td>
<script type="text/javascript"><!--
for (let i in navigator.languages) {
  document.write(navigator.languages[i] + ', ');
}
-->
</script>
    </td>
  </tr>
  <tr>
    <td>navigator.plugins</td>
    <td>
<script type="text/javascript"><!--
for (let i in navigator.plugins) {
  document.write(navigator.plugins[i] + ', ');
}
-->
</script>
    </td>
  </tr>
</table>

出力結果:

あなたの値
navigator.userAgent
navigator.appName
navigator.codeName
navigator.appVersion
navigator.platform
navigator.language
navigator.languages
navigator.plugins

参考文献・サイト[18]

現在のページのURLを取得

location.href で取得可能[1]

例:

また、値を設定することでページを移動させることも可能[2]

【コード】

<button onclick="location.href='http://www.cudo29.org/'">ページを移動</button> 

【表示】

参照元URL

どこか他のページからリンクをたどって現在のページにやってきた場合、リンク元ページのURLを得るにはdocument.refererが使える[2-3]

【コード】

<script type="text/javascript"><!--
  document.write('このページには ' + document.referrer + ' から来られましたね');
//-->
</script>

【表示】

GET値

location.search で、?を含むGETクエリ部分を取得できる。これを使って配列にGET引数を受け取ることができる。[30]

// GET引数受領
var getargs = {};
if (window.location.search.length &gt; 1) {
  // 先頭の?を除去して受領
  var querystr = window.location.search.substring( 1 );
  // & で分割して配列に格納
  var params = querystr.split('&');
  // 各要素を処理
  for (var i = 0; i < params.length; i++ ) {
    // キーと値に分割
    var elem = params[i].split('=');
    var key = decodeURIComponent(elem[0]);
    var value = decodeURIComponent(elem[1]);
    // キーセットを連想配列に追加
    getargs[ key ] = value;
  }
}

現在のページの情報を取得

location.host でホスト名とポート番号、location.hostnameでホスト名のみ、location.portでポート番号のみを取得できる[26][38]

【コード】

コード 内容
location.host ホスト名とポート番号 example.org:80
location.hostname ホスト名のみ example.org
location.port ポート番号のみ 80
location.pathname パス /
location.protocol プロトコル http:
【例】
<script type="text/javascript"><!--
  document.write('<p>このページのホスト名は「' + location.hostname + '」です</p>' + "\n");
  document.write('<p>このページのホスト名+ポート番号は「' + location.host + '」です</p>' + "\n");
  document.write('<p>このページのポート番号は「' + location.port + '」です</p>' + "\n");
  document.write('<p>このページのプロトコルは「' + location.protocol + '」です</p>' + "\n");
  document.write('<p>このページのパスは「' + location.pathname + '」です</p>' + "\n");
//-->
</script>

【表示】

htmlの内容取得・操作

情報取得

documentに対して使うもの
書式 検索キー 返り値
getElementsByTagName(タグ名)[2-7]、[01] タグ名 指定タグ要素を全て含む配列
getElementsByName(name属性値)[2-5]、[15]、[1] name属性値 指定したname属性値を持つ要素を全て含む配列
getElementById(id属性値) id属性値 指定したid属性値を持つ要素(オブジェクト)
【例】指定タグの数、指定name属性値を持つ要素の数、指定id属性値を持つ要素のvalue属性値
<script type="text/javascript"><!--
function counter(type,arg) {
  if (type == 'TagName') {
    alert('このページには' + document.getElementsByTagName(arg).length + '個の' + arg + 'タグがあります');
  } else if (type == 'Name') {
    alert('このページにはname属性値が' + arg + 'である要素が' + document.getElementsByName(arg).length + '個あります。');
  } else if (type == 'Id') {
    alert('このページでid属性値に' + arg + 'が設定されている要素のvalue属性値は' + document.getElementById(arg).value + 'です。');
  }
}
-->
</script>
<p>
  <input type="hidden" name="hoge" value=""/>
  <input type="hidden" name="pooh" id="pooh" value=""/>
  <input type="button" value="aタグの数" onclick="counter('TagName','a')"/>
  <input type="button" value="name属性値hogeを持つ要素の数" onclick="counter('Name','hoge')"/>
  <input type="button" value="id属性値にpoohを持つ要素の内容" onclick="counter('Id','pooh')"/>
<p>

elementに対して使うもの
書式 備考
getAttribute(属性名) 指定した属性の値を返す
setAttribute(属性名,属性値) 指定した属性を追加する
removeAttribute(属性名) 指定した属性を削除する
【例】チェックボックスのON/OFFに対応してボタンの有効/無効が切り替わる
<script type="text/javascript"><!--
function control_attribute() {
  if (document.getElementById('attrcontroller').checked) {
    document.getElementById('control_receiver').removeAttribute('disabled');
  } else {
    document.getElementById('control_receiver').setAttribute('disabled','disabled');
  }
}
-->
</script>
    <p>
<label><input type="checkbox" id="attrcontroller" onchange="control_attribute()"/>チェックをONにすると右のボタンが有効になり、OFFにすると無効になります。</label>
<input type="button" value="ボタン" id="control_receiver"/>
    </p>

選択されているselect要素のIDを得る(select.selectedindex)

参考文献・サイト[2-8]

指定した属性キーの値を取得

要素ノード.getAttribute(属性キー値)

要素の中に含まれるhtmlを得る(innerHTML)

innerHTMLは要素の中に含まれるhtmlを返す

【書式】
要素.innerHTML;
【例】

要素自体も含むhtmlを得る(outerHTML)

outerHTMLは要素自体も含むhtmlを返す

【書式】
要素.outerHTML;
【例】

文字列を出力する(document.write)

document.writeは指定したドキュメントに文字列や値を書き込む。document.writelndocument.writeとほぼ同じだが、最後に改行コードが出力される点が異なる。書き込みが完了した後はdocument.closeで書き込みを閉じること(閉じないと正しく出力されないことがある)。

【書式】
document.write(文字列);
document.writeln(文字列);
document.close();

【例】
document.writeln("<div>");
document.writeln("ほげ");
document.writeln("</div>");

ウインドウ操作

窓を開く(window.open)

【書式】
window.open("ファイル名","フレーム名",オプション);
    

フレーム名

_top
フレームトップ
_blank
新規ウインドウ
_self
自分自身のウインドウ(フレーム)
_parent
1つ上位のウインドウ(フレーム)

スタイル

height=
ウインドウの高さ
width=
ウインドウの幅
left=
ウインドウの位置(画面左端からの距離)
top=
ウインドウの位置(画面上端からの距離)
scrollbars=
スクロールバーの表示(yesで表示、noで非表示)
menubar=
メニューバーの表示(yesで表示、noで非表示)
location=
アドレスバー表示(yesで表示、noで非表示)
toolbar=
ツールバーの表示(yesで表示、noで非表示)
status=
ステータスバーの表示(yesで表示、noで非表示)
resizable=
ウインドウのサイズ変更の可否設定(yesで可能、noで不可)

別ウインドウで開くには、スタイルを指定する必要があるよう。指定しないで、別のフレーム名を指定して開くと、別タブで開かれる(タブブラウザの場合、Mac OS X 10.4.11+Firefox 3.0.11で確認)。

window.openを使うと、target属性値で開くフレームを指定する方法がとれない Strict やXHTML 1.1で開く先のフレームを指定できる。

<a href="http://www.hoge.com/" onclick="javascript:window.open(this.href,'fuga');return false">
hogeをfugaフレームに開きます</a>
this.href: 自己要素(a要素)のhref属性の値=http://www.hoge.com/
return false: htmlとしてのハイパーリンクを無効化する(有効だとhtmlのハイパーリンクが効いて自己フレームに開いてしまう)
    

参考文献・サイト:

前のページに戻る(window.back)

ブラウザの「戻る」ボタンを押すのと同じ挙動をする。

window.back();
    

別のページに移動させる

location.hrefで実現可能。

【書式】
location.href='リダイレクト先URL';
【例】ボタンをクリックするとトップページに移動
<input type="button" value="クリックするとトップページに移動します" onclick="location.href='index.html'"/>

フォーム関係

[13]

submitする

【書式】
document.forms[].submit();
    

にはform要素の登場順序を示す数値(最初が0)または対象form要素のid属性値を指定(xhtml1.1より前ではform要素にname属性を指定しこれで示すこともできるが、xhtml1.1ではform要素にname属性を指定するのはNG)。

【例】
<form method="post" action="hoge.cgi" id="fuga">
<input type="text" name="name" value="Thomus" />
<input type="text" name="number" value="1" />
<a href="" onclick="document.forms['fuga'].submit();return false;">submit</a>
</form> ↑戻り値にfalseを指定するとhref要素に記述された先へのリンクが無効化される
    

選択値の変更を検知

プルダウンリストの選択内容変更などのイベントを検知する。選択内容に応じたページ内容を表示することなどに使える。

<select onchange="alert(this.options[this.selectedIndex].value);">
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
</select>
this: select要素全体
selectedIndex: 選択されているインデックス番号(最初が0番)
options[番号].value: 指定インデックス番号の値(表示値を指定したいならvalueの代わりにtext)


    

入力ボックスの値を付加したURLを開く

テキストボックスに入力された値は下記書式にて取得できる。

【書式】
document.forms[対象フォーム要素のページ内の出現順序].element['対象input要素のid属性値'].value
対象フォーム要素のページ内の出現順序
ページの最初に出現するform要素を0番とした出現順序を示す値。
【例】
<form method="post" action="#" id="myform">
  <input type="text" size="4" maxlength="4" value="" id="pdbid"/>
  <input type="button" value="Display PDBj Mine Summary Page" 
         onclick="window.open('http://service.pdbj.org/mine/summary_j/' + document.forms[0].element['pdbid'].value)"/>
</form>

フォームのリクエスト結果を表示するターゲットを指定する

フォームのリクエスト送信結果を表示するターゲットフレームを指定するには、form要素のtarget属性を指定する方法があるが、この方法はHTML1.0 Transitional/Framesetでしか使えない。XHTML1.1などではonsubmit属性で指定すればよい41

<form method="get" name="searchform" action="https://example.com/form" onsubmit="document.searchform.target='_blank'return true">
</form>

ダイアログ関係

警告ダイアログを表示する

ボタンは「OK」ボタン1つだけである「警告ダイアログ」を表示するには、windows.alertを用いる。

【書式】
window.alert("表示メッセージ");
    

表示メッセージ中での改行は"\n"、タブは"\t"。

function test(id){
  window.confirm("OKボタンをクリックして下さい。");
}
    

参考文献・サイト[2-9]

確認ダイアログを表示する

「キャンセル」「OK」の2つのボタンを持つ「確認ダイアログ」を表示するには、windows.confirmを用いる。

function del(id){
  window.confirm("以下のエントリーを削除します。よろしいですか?\nID:\t" + id);
}
    

確認ダイアログ内での改行は"\n"、タブは"\t"。 OKボタンがクリックされるとtrue、キャンセルボタンまたは×ボタンがクリックされるとfalseを返す。

参考文献・サイト[19]、[2-10]

イベント関係

onBeforeUnload

別のページに移動しようとした時やページを閉じようとした時に発生するイベント。 returnで何か値を返すと、イベントが発生した時確認ダイアログが表示される[1]

例:
<script type="text/javascript"><!--
window.onbeforeunload = function () {
  return "本当に離れますか?";
}
--></script>

条件分岐

【書式】
if (条件) {
  処理内容
} else if (条件) {
  処理内容
  ...
} else {
  処理内容
}
  
【書式】
switch (変数) {
case 値1:
  処理内容
  break;
case 値2:
  処理内容
  break;
...
default:
  処理内容
  break;
}
  

switch文の場合、break文を入れないと引き続き後続のcase文まで実行されていく。逆にそれを利用して複数の条件を束ねることもできる。

【例】
switch (3) {
case 1:
case 2:
  echo 'Less than 3.';
  break;
case 3:
  echo 'Equal to 3.';
  break;
default:
  echo 'Larger than 3.';
}
  
while
例:0〜9999の総和
う〜う〜う〜 きゃはははは

参考文献・サイト[25]

繰り返し処理

for を使って繰り返し処理を記述することができる[2]

【書式1】
for (初期条件; 継続条件; 次ループに移る時の処理) {
  処理内容
}
【例1】
  var myarray = [3,4,10,9,1,9,9,5,4,2];
  var sum = 0;
  var i = 0;
  for (i=0; iループ処理内で変化させる変数の名前 in 配列変数) {
  処理内容
}
【例1】
  var myarray = [3,4,10,9,1,9,9,5,4,2];
  var sum = 0;
  var i = 0;
  for (i in myarray) {
	sum += myarray[i];
  }
  alert("合計は" + sum + "です");

関数、変数の定義

関数定義(function)

その他参考文献・サイト[1]、[2-4]

【書式】
function 関数名(引数名,引数名2...)
{
  ...
}

【例】
<script type="text/javascript"><!--
function myfunc(name) {
  document.write('My name is ' + name + '.');
}
myfunc("Kudou");
//-->
<script>

関数の引数は arguments で参照できる(各引数を格納した配列を返す)。arguments.length とすると引数の個数が得られる[9]

これを利用して、引数のデフォルト値を設定することができる16

変数

変数を用いるにはあからじめvarを使って宣言する必要がある。代入や参照の方法も含め、事例を以下に示す[14]

【コード】

<script type="text/javascript"><!--
var name;
name = 'taro';
document.write('My name is ' + name + '.');
//-->
</script>

【表示】

値を返す(return)

配列

配列に指定したキーがあるかどうかを判定

未定義のキーを持つ要素にアクセスしようとすると undefined という特別な定数が返ることを利用すればよい[32]

var greetings = {english: "hello"};
if ( greetings["japanese"] !== undefined ) {
  alert("The japanese greeting is not defined.");
} else {
  alert(greetings["japanese"]);
}

ツール、ライブラリ

jQuery[33]を使って、開閉するメニューなどを簡単に実装することができる[34]

サンプル

現在のページのURL(ページ内位置指定は除去する)を取得する

関連項目:

【コード例】

<script type="text/javascript"><!--
document.write("<p>このページのURLは "+location.href+" です。</p>")
sharppos = location.href.indexOf("#",0)
if (sharppos == -1) {
  document.write("<p>ページ内位置指定はありません。</p>")
} else {
  document.write("<p>ページ内位置指定を除去すると "+location.href.substr(0,sharppos)+" です。</p>")
}
//--></script>

【表示】

#を?に変えれば、GET引数部分も除去した、ファイル名までの部分が得られる。

アルファベット順インデックス

d

l

m

w