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

回答編集履歴

2

HTML追記漏れ

2017/06/29 09:04

投稿

x_x
x_x

スコア13749

answer CHANGED
@@ -19,6 +19,17 @@
19
19
 
20
20
  -- 6/29 追記 --
21
21
  基本的には変わっていませんが、TextNode取得箇所をXPathなしで書き直してみます。
22
+ ```HTML
23
+ <div class="col1">
24
+ <table>
25
+ <tbody>
26
+ <tr><td>science</td></tr>
27
+ <tr><td>chemistry</td></tr>
28
+ <tr><td>science and chemistry</td></tr>
29
+ </tbody>
30
+ </table>
31
+ </div>
32
+ ```
22
33
  ```JavaScript
23
34
  function getTextNodes(parentElement) {
24
35
  var nodes = [];

1

基本的には変わっていませんが、TextNode取得箇所をXPathなしで書き直してみます。

2017/06/29 09:04

投稿

x_x
x_x

スコア13749

answer CHANGED
@@ -15,4 +15,41 @@
15
15
  $(node).replaceWith($.parseHTML(text));
16
16
  }
17
17
  });
18
+ ```
19
+
20
+ -- 6/29 追記 --
21
+ 基本的には変わっていませんが、TextNode取得箇所をXPathなしで書き直してみます。
22
+ ```JavaScript
23
+ function getTextNodes(parentElement) {
24
+ var nodes = [];
25
+ $(parentElement).contents().each(function(index, element) {
26
+ switch (element.nodeType) {
27
+ case document.TEXT_NODE:
28
+ nodes.push(element);
29
+ break;
30
+ case document.ELEMENT_NODE:
31
+ nodes = nodes.concat(getTextNodes(element));
32
+ break;
33
+ }
34
+ });
35
+ return nodes;
36
+ }
37
+
38
+ var list = {
39
+ science: '<div class="subject science">科学</div>',
40
+ chemistry: '<div class="subject chemistry">化学</div>'
41
+ };
42
+
43
+ $("div.col1").each(function(index, element) {
44
+ var nodes = getTextNodes(element);
45
+ for (var j = 0; j < nodes.length; j++) {
46
+ var node = nodes[j];
47
+ var text = node.nodeValue;
48
+ for (var i in list) {
49
+ text = text.replace(i, list[i]);
50
+ }
51
+
52
+ $(node).replaceWith($.parseHTML(text));
53
+ }
54
+ });
18
55
  ```