回答編集履歴

2

typo修正

2016/06/11 21:44

投稿

think49
think49

スコア18164

test CHANGED
@@ -294,7 +294,7 @@
294
294
 
295
295
 
296
296
 
297
- - 2016/06/12 06:36 連続するp要素の2つ目以降のp要素の before-n が期待通りに動作しなかった不具合を修正。before-n における ` ` の合計算出時に要素を乗り越えて記録していた不具合を修正(実質的にはホワイトスペースノードd値がクリアされていたので表面化されていませんでした)。
297
+ - 2016/06/12 06:36 連続するp要素の2つ目以降のp要素の before-n が期待通りに動作しなかった不具合を修正。before-n における ` ` の合計算出時に要素を乗り越えて記録していた不具合を修正(今までのサンプルではホワイトスペースノードで数値がクリアされていたので表面化されていませんでした)。
298
298
 
299
299
 
300
300
 

1

before-n ののバグ修正

2016/06/11 21:44

投稿

think49
think49

スコア18164

test CHANGED
@@ -1,8 +1,12 @@
1
+ ### String.prototype.replace
2
+
3
+
4
+
1
5
  `String.prototype.replace` の第二引数に関数を指定して分岐処理すれば良いと思います。
2
6
 
3
7
 
4
8
 
5
- - [HTMLタグを解析して書き換える - JSFiddle](https://jsfiddle.net/n1tb3pky/)
9
+ - [HTMLタグを解析して書き換える - JSFiddle](https://jsfiddle.net/n1tb3pky/1/)
6
10
 
7
11
 
8
12
 
@@ -78,7 +82,7 @@
78
82
 
79
83
 
80
84
 
81
- return string.replace(/(<p(?: [^>]*)?>)([^<>]*<\x2Fp>)([^<>]*)|<[^>]*>|([^<>]+)/g, function (match, p1, p2, p3, p4) {
85
+ return string.replace(/(<p(?: [^>]*)?>)([^<>]*<\x2Fp>)([^<>]*)|(<[^>]*>)|([^<>]+)/g, function (match, p1, p2, p3, p4, p5) {
82
86
 
83
87
  if (p1) {
84
88
 
@@ -102,6 +106,8 @@
102
106
 
103
107
  tokens.push('after-' + after.length);
104
108
 
109
+ before = after.length;
110
+
105
111
  }
106
112
 
107
113
 
@@ -114,7 +120,15 @@
114
120
 
115
121
  if (p4) {
116
122
 
123
+ before = 0;
124
+
125
+ }
126
+
127
+
128
+
129
+ if (p5) {
130
+
117
- before = p4.match(/&nbsp;/g);
131
+ before = p5.match(/&nbsp;/g);
118
132
 
119
133
  before = before ? before.length : 0;
120
134
 
@@ -136,10 +150,10 @@
136
150
 
137
151
 
138
152
 
153
+ event.preventDefault();
154
+
139
155
  elements['output'].value = replaceSample(elements['input'].value);
140
156
 
141
- event.preventDefault();
142
-
143
157
  }
144
158
 
145
159
  </script>
@@ -198,7 +212,7 @@
198
212
 
199
213
  &amp;nbsp;
200
214
 
201
- &lt;p&gt;段落&lt;/p&amp;nbsp;&gt;
215
+ &lt;p&gt;段落&lt;/p&gt;
202
216
 
203
217
  &amp;nbsp;
204
218
 
@@ -244,10 +258,20 @@
244
258
 
245
259
  &amp;nbsp;
246
260
 
261
+ &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;!-- テキストノードを挟まない場合 --&gt;&lt;p&gt;段落&lt;/p&gt;
262
+
263
+ &amp;nbsp;
264
+
265
+ &lt;p&gt;段落&lt;/p&gt;
266
+
267
+ &amp;nbsp;
268
+
269
+ &amp;nbsp;
270
+
271
+ &amp;nbsp;
272
+
247
273
  &lt;/div&gt;
248
274
 
249
- &lt;/div&gt;
250
-
251
275
  </textarea>
252
276
 
253
277
  </p>
@@ -266,4 +290,12 @@
266
290
 
267
291
 
268
292
 
293
+ ### 更新履歴
294
+
295
+
296
+
297
+ - 2016/06/12 06:36 連続するp要素の2つ目以降のp要素の before-n が期待通りに動作しなかった不具合を修正。before-n における `&nbsp;` の合計算出時に要素を乗り越えて記録していた不具合を修正(実質的にはホワイトスペースノードd値がクリアされていたので表面化されていませんでした)。
298
+
299
+
300
+
269
301
  Re: flat さん