teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

sampe

2018/04/02 05:57

投稿

yambejp
yambejp

スコア117912

answer CHANGED
@@ -113,4 +113,7 @@
113
113
  </tbody>
114
114
  </table>
115
115
 
116
- ```
116
+ ```
117
+
118
+ # sample
119
+ - [CodePen](https://codepen.io/yambejp/pen/wmjbWp)

2

追記

2018/04/02 05:57

投稿

yambejp
yambejp

スコア117912

answer CHANGED
@@ -58,4 +58,59 @@
58
58
  }
59
59
  });
60
60
  });
61
+ ```
62
+
63
+ # 複数列
64
+ 複数列バージョンです
65
+
66
+ ```javacript
67
+ $(function(){
68
+ $('#t1 tbody td').filter(function(){
69
+ return $(this).closest('tr').find('td').index(this)==0;
70
+ }).on('click',function(){
71
+ var list=$(this).siblings('td').map(function(x){return {idx:x+1,num:parseInt($(this).text())}}).get();
72
+ list.sort(function(x,y){
73
+ if(x["num"]==y["num"]) return 0;
74
+ return x["num"]>y["num"]?1:-1;
75
+ });
76
+ $(this).closest('table').find('tr').each(function(){
77
+ var self=$(this);
78
+ list.forEach(function(x){
79
+ self.find('td,th').eq(x["idx"]).clone().appendTo(self);
80
+ });
81
+ self.find('td,th').filter(':gt(0):lt('+list.length+')').remove();
82
+ });
83
+ });
84
+ });
85
+ ```
86
+ ```HTML
87
+ <table id="t1">
88
+ <thead>
89
+ <tr>
90
+ <th data-type="string">名前<span></span></th>
91
+ <th data-type="integer">国語<span></span></th>
92
+ <th data-type="integer">数学<span></span></th>
93
+ <th data-type="integer">保健<span></span></th>
94
+ <th data-type="integer">社会<span></span></th>
95
+ <th data-type="integer">美術<span></span></th>
96
+ <th data-type="integer">英語<span></span></th>
97
+ </tr>
98
+ </thead>
99
+ <tbody>
100
+ <tbody>
101
+ <tr class="dothesort">
102
+ <td>鈴木</td><td>12</td><td>19</td><td>25</td><td>25</td><td>89</td><td>25</td>
103
+ </tr>
104
+ <tr class="dothesort">
105
+ <td>高橋</td><td>25</td><td>89</td><td>25</td><td>25</td><td>89</td><td>25</td></tr>
106
+ </tr>
107
+ <tr class="dothesort">
108
+ <td>佐藤</td><td>60</td><td>987</td><td>89</td><td>25</td><td>89</td><td>25</td>
109
+ </tr>
110
+ <tr class="dothesort">
111
+ <td>山田</td><td>604</td><td>78</td><td>25</td><td>25</td><td>89</td><td>25</td>
112
+ </tr>
113
+ </tbody>
114
+ </table>
115
+
61
116
  ```

1

追記

2018/04/02 05:27

投稿

yambejp
yambejp

スコア117912

answer CHANGED
@@ -40,4 +40,22 @@
40
40
  </tr>
41
41
  </tbody>
42
42
  </table>
43
+ ```
44
+
45
+ # ちょっと改良
46
+ こちらのほうがちょっとjQueryらしいかもしれませんね
47
+ ```javascript
48
+ $(function(){
49
+ $('#t1 tbody td').filter(function(){
50
+ return $(this).closest('tr').find('td').index(this)==0;
51
+ }).on('click',function(){
52
+ var t1=parseInt($(this).siblings().eq(0).text());
53
+ var t2=parseInt($(this).siblings().eq(1).text());
54
+ if(t1>t2){
55
+ $(this).closest('table').find('tr').each(function(){
56
+ $(this).find('td,th').eq(1).appendTo($(this));
57
+ });
58
+ }
59
+ });
60
+ });
43
61
  ```