人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javascriptの質問です
example1とexample2のセレクトボックスを選択して範囲を選択したら、tableの一列目で該当する行だけを表示して欲しいのですが、どのようにjavascriptを組めばいいでしょうか?

●質問者: takanii
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から
<html><body>
<select name="example1">
<option value="1">1から</option>
<option value="2">2から</option>
<option value="3">3から</option>
<option value="4">4から</option>
</select>
<select name="example2">
<option value="1">1まで</option>
<option value="2">2まで</option>
<option value="3">3まで</option>
<option value="4">4まで</option>
</select>
<TABLE>
 <tr>
 <td>1</td>
<td>hoge</td>
 </tr>
 <tr>
 <td>1</td>
<td>hoge</td>
 </tr>
 <tr>
 <td>2</td>
<td>hoge</td>
 </tr>
 <tr>
 <td>3</td>
<td>hoge</td>
 </tr>
 <tr>
<td>3</td>
<td>hoge</td>
</tr>
<tr>
<td>4</td>
<td>hoge</td>
</tr>
</TABLE></body></html>

1 ● rikuba
●300ポイント ベストアンサー

サンプル:JS Bin - Collaborative JavaScript Debugging

主要なコードを抜粋すると以下の通りです。
便宜上、select要素にid属性とonchange属性を付加しています。

<select name="example1" id="example1" onchange="filterTableListener.handleEvent(event);">
<option value="1">1から</option>
<option value="2">2から</option>
<option value="3">3から</option>
<option value="4">4から</option>
</select>
<select name="example2" id="example2" onchange="filterTableListener.handleEvent(event);">
<option value="1">1まで</option>
<option value="2">2まで</option>
<option value="3">3まで</option>
<option value="4" selected>4まで</option>
</select>

<!-- table -->

<script>
var filterTableListener = {
 table: document.getElementsByTagName('table')[0],
 select1: document.getElementById('example1'),
 select2: document.getElementById('example2'),

 min: 0,
 max: 0,

 // 最小値と最大値を2つのselect要素から取得します
 getLimits: function () {
 var min = Number(this.select1.value);
 var max = Number(this.select2.value);
 if (min < max) {
 this.min = min;
 this.max = max;
 } else {
 this.min = max;
 this.max = min;
 }
 },

 // select要素が変更されたときに呼び出されます
 handleEvent: function (e) {
 this.getLimits();
 this.filterTable();
 },

 // this.tableの各行について、表示・非表示を設定します
 filterTable: function () {
 var rows = this.table.rows;
 for (var i = 0, l = rows.length; i < l; ++i) {
 rows[i].style.display = this.filterRow(rows[i]) ? '' : 'none';
 }
 },

 // 引数のtr要素が表示すべき要素かどうかを判断します
 filterRow: function (tr) {
 var n = Number(tr.cells[0].firstChild.nodeValue);
 return this.min <= n && n <= this.max;
 }
};
</script>
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ