[javascript] brownie-json-dom.js サンプル

先日のJSONオブジェクトツリーからHTMLを生成するサンプルです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>brownie-json-dom.js sample</title>
 <style type="text/css"><!--
table.software-list { 
    border-collapse: collapse; 
    empty-cells: show; 
}

th { 
    background: Menu; 
    border: 1px solid black;
}

td { 
    border: 1px solid black;
}

--></style>
<script language="javascript" type="text/javascript" src="../js/prototype.js" ></script>
<script language="javascript" type="text/javascript" src="../js/brownie-json-dom.js" ></script>
<script language="javascript" type="text/javascript" ><!--

Event.observe( window, "load", function() {
    var tableData = [
        { id: 1,  name: "Firefox1.0.7", descriptions: "ブラウザ。デバッグに便利" },
        { id: 2,  name: "J2SE 1.4.2", descriptions: "java使ってますからね" },
        { id: 3,  name: "Apache 2.0.52", descriptions: "Subversionにも使ってます" }
    ];
    
    var tableJsonDom = { tagName: "table", className:"software-list",  body: [
        { tagName: "thead", body: [
            { tagName: "tr", style: "text-align:center", body: [
                { tagName: "th", body: "id" },
                { tagName: "th", body: "name" },
                { tagName: "th", body: "descriptions" }
            ] }
        ] },
        { tagName: "tbody", body: [] }
    ] };
    for(var i = 0; i < tableData.length; i++) {
        var rowData = tableData[i];
        var tr = { tagName: "tr", body: [
            { tagName: "td", style:"text-align:right", width:"20px", body: rowData.id },
            { tagName: "td", style:"text-align:left", width:"100px", body: rowData.name },
            { tagName: "td", style:"text-align:left", body: rowData.descriptions }
        ] };
        tableJsonDom.body[1].body.push(tr);
    }
    var builder = new JsonDomBuilder("body", document);
    var tableElement = builder.execute( tableJsonDom );
    $("softwareList").appendChild( tableElement );
}, false);

--></script>
</head>
<body>
    <div id="softwareList"></div>
</body>
</html>

tableDataというテーブルの元データがあったとして、こいつをtableで表現したい場合には上記のように書けます。

まずtableJsonDomというテーブルの固定部をJSONで定義しておいて、for文でそのtbodyの部分に、tableDataの各データを行として追加していきます。んで、JsonDomBuilderを生成してtableDataについて実行。出来上がったTABLE要素をsoftwareListというDIV要素に挿入する、ということをやってます。

tableJsonDomの部分はHTMLで書いちゃっても全然OKですね。tbody要素にidを付けておいてそこにappendChildしてやれば同じですね。

実際のアプリケーションでは、tableDataはprorotype.jsのAjax.Requestとかjson-rpc-XXXとかで持ってくることになるでしょう。