sembokulove
@sembokulove (Missing place)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

テーブルをプルダウンに合わせて表示切替し、尚且つ、表示されたテーブルを並び替えたいです。

テーブルをプルダウンに合わせて表示切替し、尚且つ、表示されたテーブルを並び替えたいです。
まず、以下のjavascript文で表示の切り替えに成功しました。

  <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
      <script id="rendered-js" >
$('select').change(function () {
  var val = $('select option:selected').val();
  if (val == 'select') return;
  $('tr').fadeOut();
  $('tr#' + val).fadeIn();
});
//# sourceURL=pen.js
    </script>

しかし、1段目のtrタグでdisplay:inline;をやっても表示されず、
それがゆえに、並び替えができません。
どうしたらいいでしょうか。
僕が参考にしたのは主にこの2つです。
https://homemadegarbage.com/selectbox-show
https://konoti.com/website/javascript/table-sort.html
以下はhtmlとjavascript文です。

<html>
    <head>
        <title>simplePaginationのサンプルデモ</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <!--一時的に対応。コンテンツが増えたら削除予定-->
        <meta name="robots" content="noindex">
        
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.31.2/js/jquery.tablesorter.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.31.2/css/theme.default.min.css">


        <link rel= "stylesheet" href="pageStyle.css"> 

    </head>
    <body>

      

<script type="text/javascript">
        $(document).ready(function() 
            { 
                $("#testTbl").tablesorter(); 
            } 
        );            
</script>

    </body>
</html>
<hr>

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  

    <link rel="apple-touch-icon" type="image/png" href="https://cpwebassets.codepen.io/assets/favicon/apple-touch-icon-5ae1a0698dcc2402e9712f7d01ed509a57814f994c660df9f7a952f3060705ee.png" />

    <meta name="apple-mobile-web-app-title" content="CodePen">

    <link rel="shortcut icon" type="image/x-icon" href="https://cpwebassets.codepen.io/assets/favicon/favicon-aec34940fbc1a6e787974dcd360f2c6b63348d4b1f4e06c77743096d55480f33.ico" />

    <link rel="mask-icon" type="image/x-icon" href="https://cpwebassets.codepen.io/assets/favicon/logo-pin-b4b4269c16397ad2f0f7a01bcdf513a1994f4c94b8af2f191c09eb0d601762b1.svg" color="#111" />



  
    <script src="https://cpwebassets.codepen.io/assets/common/stopExecutionOnTimeout-2c7831bb44f98c1391d6a4ffda0e1fd302503391ca806e7fcc7b9b87197aec26.js"></script>


  <title>CodePen - A Pen by HomeMadeGarbage</title>

    <link rel="canonical" href="https://codepen.io/hmg/pen/ZMKLJj">
  
  
  
  
<style>
div {
  position: absolute;
  display: none;
}

/* 表示スタイル(動作に無関係) */
div {
  margin-top: 3rem;
  border: 1px solid #ccc;
  padding: 3rem;
  width: 100%;
  box-sizing: border-box;
}
#a01 {
  background: #D8DBE2;
}
#a02 {
  background: #A9BCD0;
}
#a03 {
  background: #58A4B0;
}
</style>

  
  
  
</head>

<!--<body translate="no">
  <select>
  <option value="select">選択してください</option>
  <option value="a01">要素1</option>
  <option value="a02">要素2</option>
  <option value="a03">要素3</option>
</select>
<table>
<tr><td><div id="a01"><tr><td>
要素1
</tr></td></div><td><tr>

<tr><td><div id="a02"><tr><td>
要素2
</tr></td></div><td><tr>

<tr><td><div id="a03"><tr><td>
要素3
</tr></td></div><td><tr></table>
  <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
      <script id="rendered-js" >
$('select').change(function () {
  var val = $('select option:selected').val();
  if (val == 'select') return;
  $('div').fadeOut();
  $('div#' + val).fadeIn();
});
//# sourceURL=pen.js
    </script>

  
  <script src="https://cpwebassets.codepen.io/assets/editor/iframe/iframeRefreshCSS-44fe83e49b63affec96918c9af88c0d80b209a862cf87ac46bc933074b8c557d.js"></script>
</body>

</html>-->
<body translate="no">
  <select>
  <option value="select">選択してください</option>
  <option value="semboku">泉北高速鉄道</option>
  <option value="a011">要素1</option>
  <option value="a012">要素2</option>
  <option value="a013">要素3</option>
</select>
<table id="testTbl" class="tablesorter"  border="1"  style="width: 125px;">
<thead><tr style="display: table-row;"><td rowspan="1" colspan="1">名前</td><td>点数</td><td>点数</td></tr></thead>
<tbody>
<tr id="semboku" style="display:none;"><td>中百舌鳥</td><td>なかもず</td><td>ナカモ</td></tr>
<tr id="semboku" style="display:none;"><td>深井</td><td>ふかい</td><td>フカ</td></tr>
<tr id="semboku" style="display:none;"><td>泉ケ丘</td><td>いずみがおか</td><td>イズミ</td></tr>
</tbody>
<tr id="a011" style="display:none;"><td>
要素1
</td></tr>

<tr id="a012" style="display:none;"><td>
要素2
</td></tr>

<tr id="a013" style="display:none;"><td>
要素3
</td></tr></table>
  <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
      <script id="rendered-js" >
$('select').change(function () {
  var val = $('select option:selected').val();
  if (val == 'select') return;
  $('tr').fadeOut();
  $('tr#' + val).fadeIn();
});
//# sourceURL=pen.js
    </script>

  
</body>

</html>
0

1Answer

しかし、1段目のtrタグでdisplay:inline;をやっても表示されず、
それがゆえに、並び替えができません。

切り替える際、1段目のtrタグ(thead)が消えないでほしいということでしょうか。

ヘッダーが消える原因は、切り替える際に、$('tr')がヒットして、fadeOutの対象になったためです。
加えて、fadeInの対象でもないことから再度表示されることはありません。

fadeOut、fadeInの対象をtrタグ全般ではなく、例えばtbodyタグ以下のtrタグという風に制限しますと、ヘッダーは消えなくなると思います。

$('select').change(function () {
  var val = $('select option:selected').val();
  if (val == 'select') return;
  $('tbody tr').fadeOut();
  $('tbody tr#' + val).fadeIn();
});
0Like

Comments

  1. @sembokulove

    Questioner

    ありがとうございます。
    で、それを応用して作ったのがこれですが、
    セレクトボックスでテーブルを切り替えられますが、
    いかんせん、1度切り替えて、並び替えをすると、
    2度目以降のテーブルの切り替えができません。
    どうやったら解決しますか。
    これ答えてください。
    答える人がいない場合、強制終了して、
    もう一度、出し直します。ヽ(`Д´)ノプンプン
    1個目

    <!--セレクトボックスで表示切替-->
      <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
          <script id="rendered-js" >
    $('select').change(function () {
      var val = $('select option:selected').val();
      if (val == 'select') return;
      $('tbody tr').fadeOut();
      $('tbody tr#' + val).fadeIn();
    });
        </script>
    <style>
    #sort_table {
    	border-collapse:collapse;
    }
    #sort_table td {
    }
    #sort_table th {
    	cursor:pointer;
    	background-color:lightgray;
    }
    </style>
    
    2個目
    <!--テーブルのソート機能-->
    <script>
    window.addEventListener('load', function () {
    	let column_no = 0; //今回クリックされた列番号
    	let column_no_prev = 0; //前回クリックされた列番号
    	document.querySelectorAll('#sort_table th').forEach(elm => {
    		elm.onclick = function () {
    			column_no = this.cellIndex; //クリックされた列番号
    			let table = this.parentNode.parentNode.parentNode;
    			let sortType = 0; //0:数値 1:文字
    			let sortArray = new Array; //クリックした列のデータを全て格納する配列
    			for (let r = 1; r < table.rows.length; r++) {
    				//行番号と値を配列に格納
    				let column = new Object;
    				column.row = table.rows[r];
    				column.value = table.rows[r].cells[column_no].textContent;
    				sortArray.push(column);
    				//数値判定
    				if (isNaN(Number(column.value))) {
    					sortType = 1; //値が数値変換できなかった場合は文字列ソート
    				}
    			}
    			if (sortType == 0) { //数値ソート
    				if (column_no_prev == column_no) { //同じ列が2回クリックされた場合は降順ソート
    					sortArray.sort(compareNumberDesc);
    				} else {
    					sortArray.sort(compareNumber);
    				}
    			} else { //文字列ソート
    				if (column_no_prev == column_no) { //同じ列が2回クリックされた場合は降順ソート
    					sortArray.sort(compareStringDesc);
    				} else {
    					sortArray.sort(compareString);
    				}
    			}
    			//ソート後のTRオブジェクトを順番にtbodyへ追加(移動)
    			let tbody = this.parentNode.parentNode;
    			for (let i = 0; i < sortArray.length; i++) {
    				tbody.appendChild(sortArray[i].row);
    			}
    			//昇順/降順ソート切り替えのために列番号を保存
    			if (column_no_prev == column_no) {
    				column_no_prev = -1; //降順ソート
    			} else {
    				column_no_prev = column_no;
    			}
    		};
    	});
    });
    //数値ソート(昇順)
    function compareNumber(a, b)
    {
    	return a.value - b.value;
    }
    //数値ソート(降順)
    function compareNumberDesc(a, b)
    {
    	return b.value - a.value;
    }
    //文字列ソート(昇順)
    function compareString(a, b) {
    	if (a.value < b.value) {
    		return -1;
    	} else {
    		return 1;
    	}
    	return 0;
    }
    //文字列ソート(降順)
    function compareStringDesc(a, b) {
    	if (a.value > b.value) {
    		return -1;
    	} else {
    		return 1;
    	}
    	return 0;
    }
    </script>
    

    html本文

    <select>
      <option value="select">選択してください</option>
      <option value="nankai-main">南海本線</option>
      <option value="semboku">泉北高速鉄道</option>
      <option value="a011">要素1</option>
      <option value="a012">要素2</option>
      <option value="a013">要素3</option>
    </select>
    <table id="sort_table">
    <thead>
    	<tr>
    		<th>No</th>
    		<th>全角項目</th>
    		<th>数値項目</th>
    		<th>カンマ</th>
    		<th>全角項目</th>
    		<th>数値項目</th>
    		<th>カンマ</th>
    	</tr>
    </thead>
    <tbody>
        <tr id="nankai-main"><td class="nankai-color">1</td><td class="nankai-color">南海電気鉄道</td><td class="nankai-color">南海本線</td><td class="nankai-color">難波駅</td><td class="nankai-color">なんばえき</td><td class="nankai-color">NANBA</td><td class="nankai-color">ナン</td></tr>
        <tr id="nankai-main"><td class="nankai-color">1</td><td class="nankai-color">南海電気鉄道</td><td class="nankai-color">南海本線</td><td class="nankai-color">今宮戎駅</td><td class="nankai-color">いまみやえびすえき</td><td class="nankai-color">IMAMIYAEBISU</td><td class="nankai-color">エミ</td></tr>
        <tr id="semboku" style="display:none;"><td class="semboku-color">1</td><td class="semboku-color">泉北高速鉄道</td><td class="semboku-color">泉北高速鉄道線</td><td class="semboku-color">中百舌鳥駅</td><td class="semboku-color">なかもずえき</td><td class="semboku-color">NAKAMOZU</td><td class="semboku-color">ナカモ</td></tr>
        <tr id="semboku" style="display:none;"><td class="semboku-color">2</td><td class="semboku-color">泉北高速鉄道</td><td class="semboku-color">泉北高速鉄道線</td><td class="semboku-color">深井駅</td><td class="semboku-color">ふかいえき</td><td class="semboku-color">FUKAI</td><td class="semboku-color">フカ</td></tr>
        <tr id="semboku" style="display:none;"><td class="semboku-color">3</td><td class="semboku-color">泉北高速鉄道</td><td class="semboku-color">泉北高速鉄道線</td><td class="semboku-color">泉ケ丘駅</td><td class="semboku-color">いずみがおかえき</td><td class="semboku-color">IZUMIGAOKA</td><td class="semboku-color">イズミ</td></tr>
        <tr id="semboku" style="display:none;"><td class="semboku-color">4</td><td class="semboku-color">泉北高速鉄道</td><td class="semboku-color">泉北高速鉄道線</td><td class="semboku-color">栂・美木多駅</td><td class="semboku-color">とが・みきたえき</td><td class="semboku-color">TOGA-MIKITA</td><td class="semboku-color">トガ</td></tr>
        <tr id="semboku" style="display:none;"><td class="semboku-color">5</td><td class="semboku-color">泉北高速鉄道</td><td class="semboku-color">泉北高速鉄道線</td><td class="semboku-color">光明池駅</td><td class="semboku-color">こうみょういけえき</td><td class="semboku-color">KOMYOIKE</td><td class="semboku-color">コミヨ</td></tr>
        <tr id="semboku" style="display:none;"><td class="semboku-color">6</td><td class="semboku-color">泉北高速鉄道</td><td class="semboku-color">泉北高速鉄道線</td><td class="semboku-color">和泉中央駅</td><td class="semboku-color">いずみちゅうおうえき</td><td class="semboku-color">IZUMICHUO</td><td class="semboku-color">チユオ</td></tr>
    </tbody>
    <style>
    #nankai-main
    {
    display:none;
    }
    #semboku
    {
    display:none;
    }
    td.nankai-color
    {
    	background-color:#ccc;
        border: 1pt solid #f70;
    }
    td.semboku-color
    {
    	background-color:#ccc;
        border: 1pt solid #00f;
    }
    </style>
    </table>
    <!--セレクトボックスで表示切替-->
      <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
          <script id="rendered-js" >
    $('select').change(function () {
      var val = $('select option:selected').val();
      if (val == 'select') return;
      $('tbody tr').fadeOut();
      $('tbody tr#' + val).fadeIn();
    });
        </script>
    <style>
    #sort_table {
    	border-collapse:collapse;
    }
    #sort_table td {
    }
    #sort_table th {
    	cursor:pointer;
    	background-color:lightgray;
    }
    </style>
    <script src="https://cpwebassets.codepen.io/assets/editor/iframe/iframeRefreshCSS-44fe83e49b63affec96918c9af88c0d80b209a862cf87ac46bc933074b8c557d.js"></script>
    <!--テーブルのソート機能-->
    <script>
    window.addEventListener('load', function () {
    	let column_no = 0; //今回クリックされた列番号
    	let column_no_prev = 0; //前回クリックされた列番号
    	document.querySelectorAll('#sort_table th').forEach(elm => {
    		elm.onclick = function () {
    			column_no = this.cellIndex; //クリックされた列番号
    			let table = this.parentNode.parentNode.parentNode;
    			let sortType = 0; //0:数値 1:文字
    			let sortArray = new Array; //クリックした列のデータを全て格納する配列
    			for (let r = 1; r < table.rows.length; r++) {
    				//行番号と値を配列に格納
    				let column = new Object;
    				column.row = table.rows[r];
    				column.value = table.rows[r].cells[column_no].textContent;
    				sortArray.push(column);
    				//数値判定
    				if (isNaN(Number(column.value))) {
    					sortType = 1; //値が数値変換できなかった場合は文字列ソート
    				}
    			}
    			if (sortType == 0) { //数値ソート
    				if (column_no_prev == column_no) { //同じ列が2回クリックされた場合は降順ソート
    					sortArray.sort(compareNumberDesc);
    				} else {
    					sortArray.sort(compareNumber);
    				}
    			} else { //文字列ソート
    				if (column_no_prev == column_no) { //同じ列が2回クリックされた場合は降順ソート
    					sortArray.sort(compareStringDesc);
    				} else {
    					sortArray.sort(compareString);
    				}
    			}
    			//ソート後のTRオブジェクトを順番にtbodyへ追加(移動)
    			let tbody = this.parentNode.parentNode;
    			for (let i = 0; i < sortArray.length; i++) {
    				tbody.appendChild(sortArray[i].row);
    			}
    			//昇順/降順ソート切り替えのために列番号を保存
    			if (column_no_prev == column_no) {
    				column_no_prev = -1; //降順ソート
    			} else {
    				column_no_prev = column_no;
    			}
    		};
    	});
    });
    //数値ソート(昇順)
    function compareNumber(a, b)
    {
    	return a.value - b.value;
    }
    //数値ソート(降順)
    function compareNumberDesc(a, b)
    {
    	return b.value - a.value;
    }
    //文字列ソート(昇順)
    function compareString(a, b) {
    	if (a.value < b.value) {
    		return -1;
    	} else {
    		return 1;
    	}
    	return 0;
    }
    //文字列ソート(降順)
    function compareStringDesc(a, b) {
    	if (a.value > b.value) {
    		return -1;
    	} else {
    		return 1;
    	}
    	return 0;
    }
    </script>
    

Your answer might help someone💌