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

回答編集履歴

9

補足追加

2016/07/05 13:49

投稿

yamato_hikawa
yamato_hikawa

スコア2092

answer CHANGED
@@ -27,9 +27,11 @@
27
27
  var $ol = $('ol').eq(0);
28
28
  var arr = convertArray($ol);
29
29
  console.log(arr); // ["0-1","0-2","0-3",["1-1","1-2","1-3",["2-1","2-2"],"1-4"],"0-4","0-5"]
30
+
31
+ /* 配列型→文字列型に変換する場合 */
32
+ console.log(JSON.stringify(arr));
30
33
  ```
31
34
 
32
-
33
35
  # 文字列置換パターン
34
36
  他の方が仰っていた文字列置換で行う形は下記で出来ました。
35
37
 

8

変数名の変更、処理の整理

2016/07/05 13:49

投稿

yamato_hikawa
yamato_hikawa

スコア2092

answer CHANGED
@@ -8,11 +8,10 @@
8
8
  var $li = $list.children('li'),
9
9
  arr = [];
10
10
 
11
- [].map.call($li, function(item, index) {
11
+ [].map.call($li, function(el, index) {
12
- var $item = $(item),
13
- $childList = $item.children('ol'),
12
+ var $childList = $(el).children('ol'),
14
- childArr,
15
- text = item.childNodes.item(0).nodeValue.trim();
13
+ text = el.childNodes.item(0).nodeValue.trim(),
14
+ childArr;
16
15
 
17
16
  arr.push(text);
18
17
 

7

リファクタリング

2016/07/05 13:36

投稿

yamato_hikawa
yamato_hikawa

スコア2092

answer CHANGED
@@ -10,16 +10,14 @@
10
10
 
11
11
  [].map.call($li, function(item, index) {
12
12
  var $item = $(item),
13
- $childList = $item.children('ol');
13
+ $childList = $item.children('ol'),
14
+ childArr,
15
+ text = item.childNodes.item(0).nodeValue.trim();
16
+
17
+ arr.push(text);
14
18
 
15
19
  if ($childList.length > 0) {
16
- var childArr = convertArray($childList);
20
+ childArr = convertArray($childList);
17
- }
18
-
19
- var result = item.childNodes.item(0).nodeValue.trim();
20
- arr.push(result);
21
-
22
- if (childArr) {
23
21
  arr.push(childArr);
24
22
  }
25
23
  });

6

コード修正

2016/07/05 13:31

投稿

yamato_hikawa
yamato_hikawa

スコア2092

answer CHANGED
@@ -16,7 +16,7 @@
16
16
  var childArr = convertArray($childList);
17
17
  }
18
18
 
19
- var result = $item[0].childNodes.item(0).nodeValue.trim();
19
+ var result = item.childNodes.item(0).nodeValue.trim();
20
20
  arr.push(result);
21
21
 
22
22
  if (childArr) {

5

再起パターンのコードを修正

2016/07/05 13:26

投稿

yamato_hikawa
yamato_hikawa

スコア2092

answer CHANGED
@@ -16,7 +16,7 @@
16
16
  var childArr = convertArray($childList);
17
17
  }
18
18
 
19
- var result = $item.text().replace(/( \s.*|\n)/g, '');
19
+ var result = $item[0].childNodes.item(0).nodeValue.trim();
20
20
  arr.push(result);
21
21
 
22
22
  if (childArr) {
@@ -29,7 +29,7 @@
29
29
 
30
30
  var $ol = $('ol').eq(0);
31
31
  var arr = convertArray($ol);
32
- console.log(arr);
32
+ console.log(arr); // ["0-1","0-2","0-3",["1-1","1-2","1-3",["2-1","2-2"],"1-4"],"0-4","0-5"]
33
33
  ```
34
34
 
35
35
 

4

再帰パターン追加

2016/07/05 13:25

投稿

yamato_hikawa
yamato_hikawa

スコア2092

answer CHANGED
@@ -2,7 +2,37 @@
2
2
  入れ子をどう処理するかはその後ですね。
3
3
  単純なリスト構造を配列化する処理が関数化できれば、それを使いまわせると思います。
4
4
 
5
+ # 再帰パターン
6
+ ```javascript
7
+ var convertArray = function($list) {
8
+ var $li = $list.children('li'),
9
+ arr = [];
5
10
 
11
+ [].map.call($li, function(item, index) {
12
+ var $item = $(item),
13
+ $childList = $item.children('ol');
14
+
15
+ if ($childList.length > 0) {
16
+ var childArr = convertArray($childList);
17
+ }
18
+
19
+ var result = $item.text().replace(/( \s.*|\n)/g, '');
20
+ arr.push(result);
21
+
22
+ if (childArr) {
23
+ arr.push(childArr);
24
+ }
25
+ });
26
+
27
+ return arr;
28
+ };
29
+
30
+ var $ol = $('ol').eq(0);
31
+ var arr = convertArray($ol);
32
+ console.log(arr);
33
+ ```
34
+
35
+
6
36
  # 文字列置換パターン
7
37
  他の方が仰っていた文字列置換で行う形は下記で出来ました。
8
38
 

3

修正

2016/07/05 02:19

投稿

yamato_hikawa
yamato_hikawa

スコア2092

answer CHANGED
@@ -10,8 +10,6 @@
10
10
  var $ol = $('ol'),
11
11
  listHtml = $ol[0].outerHTML;
12
12
 
13
- console.log(listHtml);
14
-
15
13
  /* 改行・半角スペース取り除き */
16
14
  listHtml = listHtml.replace(/[\n\s]/g, '');
17
15
 

2

文字列置換で処理

2016/07/05 01:32

投稿

yamato_hikawa
yamato_hikawa

スコア2092

answer CHANGED
@@ -1,3 +1,30 @@
1
1
  まずは入れ子になっていない単純なリスト構造を配列化する仕組みを考えましょう。
2
2
  入れ子をどう処理するかはその後ですね。
3
- 単純なリスト構造を配列化する処理が関数化できれば、それを使いまわせると思います。
3
+ 単純なリスト構造を配列化する処理が関数化できれば、それを使いまわせると思います。
4
+
5
+
6
+ # 文字列置換パターン
7
+ 他の方が仰っていた文字列置換で行う形は下記で出来ました。
8
+
9
+ ```javascript
10
+ var $ol = $('ol'),
11
+ listHtml = $ol[0].outerHTML;
12
+
13
+ console.log(listHtml);
14
+
15
+ /* 改行・半角スペース取り除き */
16
+ listHtml = listHtml.replace(/[\n\s]/g, '');
17
+
18
+ /* 配列文字列化 */
19
+ var str = listHtml
20
+ .replace(/^<ol><li>/, '["')
21
+ .replace(/<ol><li>/g, '",["')
22
+ .replace(/<\/li><\/ol><\/li><li>/g, '"],"')
23
+ .replace(/<\/li><\/ol>/g, '"]')
24
+ .replace(/<\/li><li>/g, '","');
25
+
26
+ /* 配列化 */
27
+ var arr = JSON.parse(str);
28
+
29
+ console.log(arr); //["0-1","0-2","0-3",["1-1","1-2","1-3",["2-1","2-2"],"1-4"],"0-4","0-5"]
30
+ ```

1

修正

2016/07/05 01:27

投稿

yamato_hikawa
yamato_hikawa

スコア2092

answer CHANGED
@@ -1,3 +1,3 @@
1
1
  まずは入れ子になっていない単純なリスト構造を配列化する仕組みを考えましょう。
2
2
  入れ子をどう処理するかはその後ですね。
3
- 単純なリスト構造を配列化する処理が関数できれば、それを使いまわせると思います。
3
+ 単純なリスト構造を配列化する処理が関数できれば、それを使いまわせると思います。