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

回答編集履歴

3

String\.prototype\.slice のコードで検索語が見つからなかった場合にテキストノード値の末尾1文字を削ってしまうバグ修正。

2017/02/28 12:02

投稿

think49
think49

スコア18194

answer CHANGED
@@ -7,12 +7,14 @@
7
7
  ```HTML
8
8
  <div class="item">商品名【商品ID】【りんご】【春夏秋冬】りんごのジュース 全3種</div>
9
9
  <div class="item">商品名【商品ID】【りんご】【春夏秋冬】りんごのジュース 全3種</div>
10
- <div class="item">商品名【商品ID】【りんご】【春夏秋冬】りんごのジュース 全3種</div>
10
+ <div class="item">商品名【商品ID】【バナナ】【春夏秋冬】バナナのジュース 全3種</div>
11
+ <div class="item">商品名【商品ID】【オレンジ】【春夏秋冬】オレンジのジュース 全3種</div>
11
12
 
12
13
  <script>
13
14
  'use strict';
14
15
  jQuery('.item').text(function (i, string) {
15
- return string.slice(0, string.indexOf('【りんご】'));
16
+ var index = string.indexOf('【りんご】');
17
+ return index !== -1 ? string.slice(0, index) : string;
16
18
  });
17
19
  </script>
18
20
  ```
@@ -39,8 +41,7 @@
39
41
 
40
42
  ### 更新履歴
41
43
  - 2017/02/28 19:37 CharacterData.prototype.deleteData のコードを追記
42
- - 2017/02/28 20:51jsfiddleのサンプル追加。
44
+ - 2017/02/28 20:51 jsfiddleのサンプル追加。CharacterData.prototype.deleteData のコードで検索語が見つからなかった場合に DOMException エラーが発生するバグ修正。
43
- String.prototype.slice のコードで検索語が見つからなかった場合にテキストノード値の末尾1文字を削ってしまうバグ修正。
45
+ - 2017/02/28 21:02 String.prototype.slice のコードで検索語が見つからなかった場合にテキストノード値の末尾1文字を削ってしまうバグ修正。
44
- CharacterData.prototype.deleteData のコードで検索語が見つからなかった場合に DOMException エラーが発生するバグ修正。
45
46
 
46
47
  Re: miconear さん

2

jsfiddleのサンプル追加。String\.prototype\.slice のコードで検索語が見つからなかった場合にテキストノード値の末尾1文字を削ってしまうバグ修正。CharacterData\.p

2017/02/28 12:02

投稿

think49
think49

スコア18194

answer CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  `jQuery.prototype.text` を併用。
4
4
 
5
+ - [テキストノード値の検索ワード以降の文字列を削除する - JSFiddle](https://jsfiddle.net/7z29dc9g/1/)
6
+
5
7
  ```HTML
6
8
  <div class="item">商品名【商品ID】【りんご】【春夏秋冬】りんごのジュース 全3種</div>
7
9
  <div class="item">商品名【商品ID】【りんご】【春夏秋冬】りんごのジュース 全3種</div>
@@ -17,18 +19,28 @@
17
19
 
18
20
  ### CharacterData.prototype.deleteData
19
21
 
20
- `CharacterData.prototype.deleteData` は古くからある DOM API ですが、使用しているコードは見たこがありません
22
+ `CharacterData.prototype.deleteData` は古くからある DOM API ですが、使ているコードはんど見かけません
21
23
  `NodeList.prototype.forEach` を併用。
22
24
 
25
+ - [テキストノード値の検索ワード以降の文字列を削除する - JSFiddle](https://jsfiddle.net/7z29dc9g/2/)
23
26
  - [インタフェース CharacterData - Document Object Model Core Level 2](http://www.y-adagio.com/public/standards/tr_dom2_core/core.html#ID-FF21A306)
24
27
 
25
28
  ```JavaScript
26
29
  document.querySelectorAll('.item').forEach(function (element) {
27
30
  var textNode = element.firstChild,
28
- string = textNode.data;
31
+ string = textNode.data,
32
+ index = string.indexOf('【りんご】');
29
33
 
34
+ if (index !== -1) {
30
- textNode.deleteData(string.indexOf('【りんご】'), string.length);
35
+ textNode.deleteData(index, string.length);
36
+ }
31
37
  });
32
38
  ```
33
39
 
40
+ ### 更新履歴
41
+ - 2017/02/28 19:37 CharacterData.prototype.deleteData のコードを追記
42
+ - 2017/02/28 20:51jsfiddleのサンプル追加。
43
+ String.prototype.slice のコードで検索語が見つからなかった場合にテキストノード値の末尾1文字を削ってしまうバグ修正。
44
+ CharacterData.prototype.deleteData のコードで検索語が見つからなかった場合に DOMException エラーが発生するバグ修正。
45
+
34
46
  Re: miconear さん

1

CharacterData\.prototype\.deleteData

2017/02/28 11:51

投稿

think49
think49

スコア18194

answer CHANGED
@@ -1,3 +1,7 @@
1
+ ### String.prototype.slice
2
+
3
+ `jQuery.prototype.text` を併用。
4
+
1
5
  ```HTML
2
6
  <div class="item">商品名【商品ID】【りんご】【春夏秋冬】りんごのジュース 全3種</div>
3
7
  <div class="item">商品名【商品ID】【りんご】【春夏秋冬】りんごのジュース 全3種</div>
@@ -11,4 +15,20 @@
11
15
  </script>
12
16
  ```
13
17
 
18
+ ### CharacterData.prototype.deleteData
19
+
20
+ `CharacterData.prototype.deleteData` は古くからある DOM API ですが、使用しているコードは見たことがありません…。
21
+ `NodeList.prototype.forEach` を併用。
22
+
23
+ - [インタフェース CharacterData - Document Object Model Core Level 2](http://www.y-adagio.com/public/standards/tr_dom2_core/core.html#ID-FF21A306)
24
+
25
+ ```JavaScript
26
+ document.querySelectorAll('.item').forEach(function (element) {
27
+ var textNode = element.firstChild,
28
+ string = textNode.data;
29
+
30
+ textNode.deleteData(string.indexOf('【りんご】'), string.length);
31
+ });
32
+ ```
33
+
14
34
  Re: miconear さん