クライアントのHTMLでExcelの「条件付き書式」を実現するためには、JavaScriptを使用する必要があります。
下記サンプルはExcelの条件付き書式と機能は異なりますが、JavaScriptとCSSを利用することで、コーディング量を大幅に削減することができます。また、CSSにより書式設定しているため速度も高速となります。
サンプルはCSS3の機能を使用しているため古いブラウザ(IE8など)では動作しませんのでご注意ください。
<!-- 【 CSS 】 ---------------------------------------------- --> <style type="text/css"> #sampleTable th {border : 1px solid #666;} #sampleTable td {border : 1px solid #666;} .allNoDisplay tr {background: #fff;font-style: normal} .fruit tr[fruit] {background: #babaff;font-style: italic} .vegetable tr[vegetable] {background: #ceffce;font-style: italic} .meat tr[meat] {background: #ffbba2;font-style: italic} </style> <!-- 【 JavaScript 】 -------------------------------------- --> <script type="text/javascript"> function goFilter(){ var wTable = document.getElementById("sampleTable"); var wSelect = document.getElementById("sampleSelect"); var value = wSelect.options[wSelect.selectedIndex ].value; if(value == 'all'){ // --- 全ての場合は初期のクラスのみとする --- wTable.className = 'allNoDisplay'; }else{ // --- 指定属性を持つTRのみ書式を変更 --- wTable.className = 'allNoDisplay ' + value; } } </scriptt> <!-- 【 HTML 】 ------------------------------------------- --> <table style="width:300px;" id="sampleTable" class="allNoDisplay"> <tr> <th>No</th> <th> <select id="sampleSelect" onChange="goFilter();"> <option value="all">全て</option> <option value="fruit">くだもの</option> <option value="vegetable">野菜</option> <option value="meat">肉</option> </select> </th> <th>金額</th></tr> <tr fruit><td>1</td><td>りんご</td><td>500円</td></tr> <tr vegetable><td>2</td><td>レタス</td><td>298円</td></tr> <tr meat><td>3</td><td>鶏肉</td><td>249円</td></tr> <tr fruit><td>4</td><td>みかん</td><td>398円</td></tr> <tr vegetable><td>5</td><td>キャベツ</td><td>198円</td></tr> <tr meat><td>6</td><td>牛肉</td><td>560円</td></tr> <tr meat><td>7</td><td>豚肉</td><td>318円</td></tr> <tr vegetable fruit><td>8</td><td>トマト</td><td>198円</td></tr> </table>
No | 金額 | |
---|---|---|
1 | りんご | 500円 |
2 | レタス | 298円 |
3 | 鶏肉 | 249円 |
4 | みかん | 398円 |
5 | キャベツ | 198円 |
6 | 牛肉 | 560円 |
7 | 豚肉 | 318円 |
8 | トマト | 198円 |
【ポイント】
「.allNoDisplay tr {background: #fff;font-style: normal} 」を有効にしTABLE内を初期状態とします。
セレクトボックスで選択された値を属性に持つTRは書式を変更します。
(例)「.fruit tr[fruit] {background: #babaff;font-style: italic}」はTRに「fruit」の属性がある場合に有効とします。
(注意)CSS3の機能を使用しているため古いブラウザ(IE8など)では条件付き書式が動作しません。
"tr[fruit]"などのCSSセレクタについては以下でご確認ください。
CSS(スタイルシート)のセレクタ指定方法
<!-- 【 CSS 】 ---------------------------------------------- --> <style type="text/css"> #sampleTable2 th {border : 1px solid #666;} #sampleTable2 td {border : 1px solid #666;} .allNoDisplay2 tr {background: #fff;font-style: normal} .fruit2 tr[fruit] {background: #babaff;font-style: italic} .vegetable2 tr[vegetable] {background: #ceffce;font-style: italic} .meat2 tr[meat] {background: #ffbba2;font-style: italic} </style> <!-- 【 JavaScript 】 -------------------------------------- --> <script type="text/javascript"> function goFilter2(){ var wTable = document.getElementById("sampleTable2"); var value = ''; // --- 選択されている商品のクラスを割り当てる --- if(document.getElementById("chkFruit").checked) {value += ' fruit2';} if(document.getElementById("chkVegetable").checked){value += ' vegetable2';} if(document.getElementById("chkMeat").checked) {value += ' meat2';} if(value == ''){ // --- 全ての場合は初期のクラスのみとする --- wTable.className = 'allNoDisplay2'; }else{ // --- 指定属性を持つTRのみ書式を変更 --- wTable.className = 'allNoDisplay2 ' + value; } } </scriptt> <!-- 【 HTML 】 ------------------------------------------- --> <table style="width:300px;" id="sampleTable" class="allNoDisplay2"> <tr> <th colspan="3"> <input type="checkbox" onChange="goFilter2()" id="chkFruit">くだもの <input type="checkbox" onChange="goFilter2()" id="chkVegetable">野菜 <input type="checkbox" onChange="goFilter2()" id="chkMeat">肉 </th> </tr> <tr><th>No</th><th>商品</th><th>金額</th></tr> <tr fruit><td>1</td><td>りんご</td><td>500円</td></tr> <tr vegetable><td>2</td><td>レタス</td><td>298円</td></tr> <tr meat><td>3</td><td>鶏肉</td><td>249円</td></tr> <tr fruit><td>4</td><td>みかん</td><td>398円</td></tr> <tr vegetable><td>5</td><td>キャベツ</td><td>198円</td></tr> <tr meat><td>6</td><td>牛肉</td><td>560円</td></tr> <tr meat><td>7</td><td>豚肉</td><td>318円</td></tr> <tr vegetable fruit><td>8</td><td>トマト</td><td>198円</td></tr> </table>
くだもの 野菜 肉 | ||
---|---|---|
No | 商品 | 金額 |
1 | りんご | 500円 |
2 | レタス | 298円 |
3 | 鶏肉 | 249円 |
4 | みかん | 398円 |
5 | キャベツ | 198円 |
6 | 牛肉 | 560円 |
7 | 豚肉 | 318円 |
8 | トマト | 198円 |
【ポイント】
「.allNoDisplay2 tr {background: #fff;font-style: normal} 」を有効にしTABLE内を初期状態とします。
チェックボックスで選択された値を属性に持つTRは書式を変更します。
(例)「.fruit2 tr[fruit] {background: #babaff;font-style: italic}」はTRに「fruit」の属性がある場合に有効とします。
(注意)CSS3の機能を使用しているため古いブラウザ(IE8など)では条件付き書式が動作しません。
"tr[fruit]"などのCSSセレクタについては以下でご確認ください。
CSS(スタイルシート)のセレクタ指定方法