Javascriptでテンプレート的な…(徒書)

javascript脳を動かす。私はgetElementsByTagNameを回避する方向で。あと、createTextNodeが個人的に見づらいので、テンプレートの各要素に空白文字を入れてdataアトリビュートの書き換えにしてみました。


<script type="text/javascript">

function HTMLWalker(handler){
  this.handler = handler;
}
HTMLWalker.prototype.walk = function(node) {
  try {
    this.handler[node.nodeName](node);
  } catch(err) {
    if (node === null)
      return;
    else if (err instanceof TypeError)
      // yada yada yada..
      "";
  }
  arguments.callee.call(this, node.firstChild);
  arguments.callee.call(this, node.nextSibling);
};

function MyHandler(){
  this.resultNode = document.createDocumentFragment();
  
  this["DIV"] = function(node) {
    alert("DIV handler called");
    node.id = "";
    node.style.display = "block";
    this.resultNode.appendChild(node);
  };
  this["H1"] = function(node) {
    alert("H1 handler called");
    node.firstChild.data = "Title";
  };
  this["P"] = function(node) {
    alert("P handler called");
    node.firstChild.data = "Paragraph";
  };
  this["#text"] = function(node) {
    alert("#text handler called");
  }
}

function add(){
  var handler = new MyHandler();
  var walker = new HTMLWalker(handler)
  walker.walk(document.getElementById("template").cloneNode(true));
  var contents = document.getElementById("contents");
  contents.appendChild(handler.resultNode);
}

</script>

<button onclick="add()">add</button>

<div id="template" style="display: none;">
<h1> </h1>
<p> </p>
</div>

<div id="contents">
</div>

意味は無し。