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

回答編集履歴

2

ES5に

2017/06/21 06:33

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37481

answer CHANGED
@@ -1,16 +1,18 @@
1
- [https://jsfiddle.net/o469aw0L/](https://jsfiddle.net/o469aw0L/)
1
+ [https://jsfiddle.net/o469aw0L/2/](https://jsfiddle.net/o469aw0L/2/)
2
2
  ```javascript
3
- $('li').on('click', function(){ let clicked; return function(e){
3
+ $('#test').on('click', function(clicked){ return function(e){
4
4
  if (clicked){
5
- let x = $(clicked).index();
5
+ var x = $(clicked).index();
6
- let y = $(e.target).index();
6
+ var y = $(e.target).index();
7
- let target = Array.from($('li'));
7
+ var target = Array.from($('li'));
8
+ var temp = target[x];
8
- [target[x],target[y]] = [target[y],target[x]];
9
+ target[x] = target[y];
10
+ target[y] = temp;
9
- $('ul').append(target);
11
+ $('#test').append(target);
10
12
  clicked = null;
11
13
  }
12
14
  else clicked = e.target;
13
- }}())
15
+ }}(null))
14
16
  ```
15
17
 
16
18
  ##### 追記

1

追記

2017/06/21 06:33

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37481

answer CHANGED
@@ -11,4 +11,23 @@
11
11
  }
12
12
  else clicked = e.target;
13
13
  }}())
14
+ ```
15
+
16
+ ##### 追記
17
+ [https://jsfiddle.net/o469aw0L/1/](https://jsfiddle.net/o469aw0L/1/)
18
+ ヴァニラ版
19
+ ```javascript
20
+ const $id = document.getElementById.bind(document);
21
+ const $qs = (s) => Array.from(document.querySelectorAll(s));
22
+ $id('test').addEventListener('click',(clicked => e => {
23
+ if (clicked) {
24
+ let target = $qs('#test li');
25
+ let x = target.indexOf(clicked);
26
+ let y = target.indexOf(e.target);
27
+ [target[x],target[y]] = [target[y],target[x]];
28
+ $id('test').append(...target);
29
+ clicked = null;
30
+ }
31
+ else clicked = e.target;
32
+ })())
14
33
  ```