回答編集履歴

2

別バージョンのソース追記

2016/06/16 19:05

投稿

hidekichi
hidekichi

スコア366

test CHANGED
@@ -143,3 +143,69 @@
143
143
 
144
144
 
145
145
  ソートし終わったhtmlにはselectedが表示されていませんが、プロパティの方で入ってますので、まぁなんとか強引に形に持っていくと言う感じで。
146
+
147
+
148
+
149
+ ###別の方法で最初のjavascriptソースを利用して
150
+
151
+
152
+
153
+ ```javascript
154
+
155
+ (function($) {
156
+
157
+ $(function() {
158
+
159
+ var options = $("#test option");
160
+
161
+ var arr = options.map(function(i, o) {
162
+
163
+ return {
164
+
165
+ text: $(o).text(),
166
+
167
+ val: o.value,
168
+
169
+ sel: o.selected //true || false
170
+
171
+ };
172
+
173
+ }).get();
174
+
175
+
176
+
177
+ arr.sort(function(o1, o2) {
178
+
179
+ return o1.text > o2.text ? 1 : o1.text < o2.text ? -1 : 0;
180
+
181
+ });
182
+
183
+ options.each(function(i, o) {
184
+
185
+ o.value = arr[i].val;
186
+
187
+ $(o).text(arr[i].text);
188
+
189
+ o.selected = arr[i].sel;
190
+
191
+ if (o.selected) {
192
+
193
+ $(o).attr("selected",true);
194
+
195
+ } else {
196
+
197
+ $(o).attr("selected",false);
198
+
199
+ }
200
+
201
+ });
202
+
203
+
204
+
205
+ });
206
+
207
+ })(jQuery);
208
+
209
+ ```
210
+
211
+ まぁ、ひとまずって感じですけれども。

1

ソース修正と追記

2016/06/16 19:05

投稿

hidekichi
hidekichi

スコア366

test CHANGED
@@ -22,6 +22,18 @@
22
22
 
23
23
  var options = $("#test option");
24
24
 
25
+ var selected = $("option[selected]").val();
26
+
27
+ /*selectされているのをチェック。
28
+
29
+ チェックが複数ある場合は、また別の方法で...というか普通はひとつですよね?*/
30
+
31
+
32
+
33
+ options.attr("selected",false); /*ここでselect解除*/
34
+
35
+
36
+
25
37
  var arr = options.map(function(i, o) {
26
38
 
27
39
  return {
@@ -45,6 +57,8 @@
45
57
  o.value = arr[i].v;
46
58
 
47
59
  $(o).text(arr[i].t);
60
+
61
+ $(this).parent("select").val(selected); /*最初に選んでおいたセレクトを適用*/
48
62
 
49
63
  });
50
64
 
@@ -125,3 +139,7 @@
125
139
  ```
126
140
 
127
141
  こんな感じに「Yes!」となるようにしてみました。
142
+
143
+
144
+
145
+ ソートし終わったhtmlにはselectedが表示されていませんが、プロパティの方で入ってますので、まぁなんとか強引に形に持っていくと言う感じで。