要素ごとに属性や子要素に制限があるので、各要素それぞれの文法チェック用関数を作ることに。リファレンスを書く以上に大変だということが分かったものの、それ以上に面白いのでどうでもいい。
要素名の連想配列から関数を呼び出す方法を考えてみた。オブジェクト指向プログラム言語としての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]()とする必要があった。でもこんな書き方して良いのだろうか。まあいいや。出来てるんだし。こういうのは書いておかないと絶対に後で意味不明になる。