要素ごとに属性や子要素に制限があるので、各要素それぞれの文法チェック用関数を作ることに。リファレンスを書く以上に大変だということが分かったものの、それ以上に面白いのでどうでもいい。
要素名の連想配列から関数を呼び出す方法を考えてみた。オブジェクト指向プログラム言語としてのJavaScriptが参考になった。とはいっても、オブジェクト指向(クラスや継承)というもののメリットはさっぱり分からないのだけど。何か、余程複雑なことをする時に必要なのだろうか。それはともかくとして。
var Check = new Object(); Check.P = function(){ …… } Check.H1 = function(){ …… } Check.BLOCKQUOTE = function(){ …… } ……………………… for(var i in Check){ if(tag_name == i){ Check[i](); break; } }
tag_name(タグ名)が、Checkオブジェクトのメンバ名とかぶったら、その関数を実行(というか、メソッド名とかぶったらそのメソッドを実行)。Check.i()
としてしまうとiを引数として扱ってくれないので、Check[i]()
とする必要があった。でもこんな書き方して良いのだろうか。まあいいや。出来てるんだし。こういうのは書いておかないと絶対に後で意味不明になる。