回答編集履歴

1

バグ修正

2020/08/04 06:36

投稿

YakumoSaki
YakumoSaki

スコア2027

test CHANGED
@@ -1,12 +1,16 @@
1
- 書いてみましたが、こんな感じでしょうか
2
-
3
- もともとのードが動かな(yougo_partsという変数が定義されいない)のでこれで
1
+ メントで頂た部分を取り込んだのバグってた部分を修正しみました。
4
-
5
- 良いのかちょっと不安ですが…
6
2
 
7
3
 
8
4
 
9
5
  ```javascript
6
+
7
+ const yougo_area = document.getElementById('sample_area');
8
+
9
+ const yougo_parts = document.getElementsByClassName('sample_part');
10
+
11
+ const input = document.getElementById('search_word');
12
+
13
+
10
14
 
11
15
  document.getElementById("search_word").addEventListener('input', (event) => {
12
16
 
@@ -16,13 +20,13 @@
16
20
 
17
21
 
18
22
 
19
- console.log(sword);
23
+ console.log("original search = ", sword);
20
24
 
21
25
 
22
26
 
23
27
  if (sword == '') { return }
24
28
 
25
- const regexp = new RegExp(`(?<=>)[^<>]*?(${sword})[^<>]*?(?=<)`, 'gi'); // タグ自体を書き換えないようにする為の正規表現
29
+ const regexp = new RegExp(`(?<=>)[^<>]*?(.*)[^<>]*?(?=<)`, 'gi'); // タグ自体を書き換えないようにする為の正規表現
26
30
 
27
31
 
28
32
 
@@ -34,43 +38,43 @@
34
38
 
35
39
 
36
40
 
37
- let searchRegexps = [];
41
+ console.log(hiragana, katakana);
42
+
43
+ console.log(`(${hiragana}|${katakana})`)
44
+
45
+ const regexp2 = new RegExp(`(${hiragana}|${katakana})`, 'gi');
38
46
 
39
47
 
40
48
 
41
- const regexpHira = new RegExp(hiragana, 'gi');
49
+ [...yougo_parts].forEach(part => {
42
50
 
43
- const regexpKata = new RegExp(katakana, 'gi');
51
+ [regexp2].forEach(function (rex) {
44
52
 
45
53
 
46
54
 
47
- const area = document.getElementById("sample_area");
55
+ part.innerHTML = part.innerHTML.replace(regexp, function (text) {
48
56
 
49
- [regexpHira, regexpKata].forEach(function (rex) {
57
+ // console.log("replace " , text);
58
+
59
+ let orgText = text;
60
+
61
+ orgText = orgText.replace(rex, (match) => { return `<span class="highlight scroll">${match}</span>` });
50
62
 
51
63
 
52
64
 
53
- area.innerHTML = area.innerHTML.replace(regexp, function (text) {
65
+ return orgText;
54
66
 
55
- console.log("replace " , text);
67
+ });
56
68
 
57
- let orgText = text;
58
-
59
- orgText = orgText.replace(rex, (match) => { return `<span class="highlight scroll">${match}</span>` });
60
-
61
-
62
-
63
- return orgText;
64
-
65
- });
69
+ });
66
-
67
-
68
70
 
69
71
  });
70
72
 
71
73
 
72
74
 
73
- // chrome ではDOMの再描画を待たないと動かない
75
+ // chrome ではDOMの再描画を待たないと動かないようだ。
76
+
77
+ // 動作中にテキスト入力を行うと移動がキャンセルされる
74
78
 
75
79
  setTimeout(function () {
76
80
 
@@ -98,7 +102,7 @@
98
102
 
99
103
 
100
104
 
101
- function hiraganaToKatakana(str) {
105
+ function katakanaToHiragana(str) {
102
106
 
103
107
  return str.replace(/[\u30a1-\u30f6]/g, function(match) {
104
108
 
@@ -112,7 +116,7 @@
112
116
 
113
117
 
114
118
 
115
- function katakanaToHiragana(str) {
119
+ function hiraganaToKatakana(str) {
116
120
 
117
121
  return str.replace(/[\u3041-\u3096]/g, function(match) {
118
122