javascriptで、サブウィンドウで選択したデータをメインウィンドウに表示する(2)

javascriptは趣味で書いている程度です。


今回スクリプトを書くにあたり、ちゃんと勉強しないといけないと思い、過去に買ったJavaScript第6版(サイ本?)などで調べました。
JavaScript 第6版
2012年8月15日 初版第1刷発行


javascriptのトレンドは追えていませんが、7版が出てるんですね。

JavaScript 第7版 単行本(ソフトカバー) – 2021/12/2

グローバル変数(Windowプロパティ)について

JavaScript第6版の
13章Webブラウザに組み込まれたJavaScript
13.1 クライアントサイドJavaScript
に、Windowオブジェクトについて記載があり、 プロパティがグローバル変数として使用できる とありました。
14章Windowオブジェクト
14.8 複数のウィンドウとフレーム
14.8.1 ウィンドウのオープンとクローズ
には window.open()メソッドを使って作成されたウィンドウ中では、openerプロパティを使って、そのウィンドウを開いたスクリプトのWindowオブジェクトを取得できる とあります。

main.htmlで、以下のグローバル変数を定義し、

var selected_pref = {};

sub.htmlで、下記のように代入しています。

window.opener.prefcode[x[i].id]=x[i].value;

メインウィンドウの表示部分について

都道府県コードと都道府県名を表示するテーブルは、更新時は一度テーブルをドキュメントから削除し、

  if( node = document.getElementById("prefcode") ){
    node.parentNode.removeChild(node);
  }

新しくテーブルを作ってドキュメントに追加しています。

  tbl.appendChild(tblbody);
  body.appendChild(tbl);


参考
15章ドキュメントの制御
15.1 DOMの概要
15.2ドキュメント要素の選択
15.6 ノードの作成、挿入、削除

sort について

main.html、sub.htmlで表示する都道府県コード、都道府県名のテーブルは、都道府県コードの昇順で表示するようにしました。

main.html

  keys = Object.keys(prefcode);
  keys.sort(function(a,b){
    return a - b;
  });

sub.html

  keys = Object.keys(pref);
  keys.sort(function(a,b){
    return a - b;
  });


ソートの比較関数でよく出てくる、a, b というのがいつも謎でした。
perl とかも謎すぎ

@array = (15,23,7,2,20);
@sorted = sort { $a <=> $b } @array;


が、以下に説明がありました!
Array.prototype.sort()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

引数
compareFn 省略可
ソート順を定義する関数を指定します。省略された場合、配列の各要素は文字列に変換され、各文字の Unicode コードポイント順に従ってソートされます。

a
比較する第一要素。

b
比較する第二要素。

compareFn(a, b) の返値 ソート順
> 0 a を b の後に並べる
< 0 a を b の前に並べる
=== 0 a と b の元の順序を維持する


参考)sortメソッドについては以下の本に記載があります
JavaScript第6版:7.8.3 sort()メソッド に約1ページ分説明あり
JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス:8章メソッド array.sort(comparefn)に約3ページ分説明あり