DataTable Control: Highlighting Cells, Rows, or Columns

このExampleでは、セル、行、列をハイライトする方法が示されている。
画面は以下のように、3つのテーブルがならんでいて、それぞれ、

  1. CellにMouseOverするとハイライトされる
  2. 行にMouseOverするとハイライトされる
  3. 見出しにMouseOverすると列がハイライトされる

ようになっている。

これらは、すべて「出来合いの」、すなわち「YUIで用意されている機能」で簡単に実現できる。

以下にHTMLの全文を示す。
これを見れば、十分であると思う。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"> 
<title>Ajax Sample</title> 
 
<style type="text/css"> 
body {
	margin:0;
	padding:0;
}
</style> 

<link rel="stylesheet" type="text/css" href="scripts/yui/fonts/fonts-min.css" /> 
<link rel="stylesheet" type="text/css" href="scripts/yui/button/assets/skins/sam/button.css" /> 
<link rel="stylesheet" type="text/css" href="scripts/yui/container/assets/skins/sam/container.css" /> 
<link rel="stylesheet" type="text/css" href="scripts/yui/datatable/assets/skins/sam/datatable.css" /> 
<script type="text/javascript" src="scripts/yui/yahoo-dom-event/yahoo-dom-event.js"></script> 
<script type="text/javascript" src="scripts/yui/element/element-beta-min.js"></script> 
<script type="text/javascript" src="scripts/yui/button/button-min.js"></script> 
<script type="text/javascript" src="scripts/yui/container/container-min.js"></script> 
<script type="text/javascript" src="scripts/yui/datasource/datasource-min.js"></script> 
<script type="text/javascript" src="scripts/yui/datatable/datatable-min.js"></script> 

<style type="text/css" id="defaultstyle">
#main {
	margin: 2px;
	padding: 3px;
}
</style>

<script type="text/javascript" src="scripts/yui/datatable/assets/js/data.js"></script> 
<script type="text/javascript"> 
YAHOO.util.Event.addListener(window, "load", function() {
	
	YAHOO.example.Highlighting = function() {
		// 列定義
        var myColumnDefs = [
            {key:"Page"},
            {key:"VisitsThisMonth"},
            {key:"VisitsThisYear"},
            {key:"ViewsThisMonth"},
            {key:"ViewsThisYear"}
        ];

        // データソースの作成
        var myDataSource = new YAHOO.util.DataSource(YAHOO.example.Data.webstats);
        myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
        myDataSource.responseSchema = {
            fields: ["Page",
                     "VisitsThisMonth",
                     "VisitsThisYear",
                     "ViewsThisMonth",
                     "ViewsThisYear"]
        };

        // セルのハイライト =======================================================================

        var cellHighlightDataTable = new YAHOO.widget.DataTable("cell",
                myColumnDefs, myDataSource, {
                    caption:"Example: CellにMouseOverするとハイライトされます"
                });
        
        // DataTableのcellMouseoverEventにDataTableで用意しているハンドラをしかけるだけ。
        cellHighlightDataTable.subscribe("cellMouseoverEvent", 
                cellHighlightDataTable.onEventHighlightCell);
        // DataTableのcellMouseoutEventにDataTableで用意しているハンドラをしかけるだけ。
        cellHighlightDataTable.subscribe("cellMouseoutEvent", 
                cellHighlightDataTable.onEventUnhighlightCell);

        // 行のハイライト =======================================================================
		
	var rowHighlightDataTable = new YAHOO.widget.DataTable("row",
                myColumnDefs, myDataSource, {
                    caption:"Example: 行にMouseOverするとハイライトされます"
                });
        
        // DataTableのrowMouseoverEventにDataTableで用意しているハンドラをしかけるだけ。
        rowHighlightDataTable.subscribe("rowMouseoverEvent", 
                rowHighlightDataTable.onEventHighlightRow);
        // DataTableのrowMouseoutEventにDataTableで用意しているハンドラをしかけるだけ。
        rowHighlightDataTable.subscribe("rowMouseoutEvent", 
                rowHighlightDataTable.onEventUnhighlightRow);

        // 列のハイライト =======================================================================

        var colHighlightDataTable = new YAHOO.widget.DataTable("column",
                myColumnDefs, myDataSource, {
                    caption:"Example: 見出しにMouseOverすると列がハイライトされます"
                });
        
        // DataTableのtheadCellMouseoverEventにDataTableで用意しているハンドラをしかけるだけ。
        colHighlightDataTable.subscribe("theadCellMouseoverEvent", 
                colHighlightDataTable.onEventHighlightColumn);
        // DataTableのtheadCellMouseoutEventにDataTableで用意しているハンドラをしかけるだけ。
        colHighlightDataTable.subscribe("theadCellMouseoutEvent", 
                colHighlightDataTable.onEventUnhighlightColumn);		
        
        return {
            oDS: myDataSource,
            oDTCellHighlight: cellHighlightDataTable,
            oDTRowHighlight: rowHighlightDataTable,
            oDTColHighlight: colHighlightDataTable
       };
    }();
});
</script>
</head> 
 
<body class=" yui-skin-sam">
<div id="main">
<p>セル、行、列をマウスオーバーでハイライトするサンプルです</p>
<div id="cell"></div> 
<div id="row"></div> 
<div id="column"></div> 
</div>
</body> 
</html>