回答編集履歴

2

HTML追記漏れ

2017/06/29 09:04

投稿

x_x
x_x

スコア13749

test CHANGED
@@ -39,6 +39,28 @@
39
39
  -- 6/29 追記 --
40
40
 
41
41
  基本的には変わっていませんが、TextNode取得箇所をXPathなしで書き直してみます。
42
+
43
+ ```HTML
44
+
45
+ <div class="col1">
46
+
47
+ <table>
48
+
49
+ <tbody>
50
+
51
+ <tr><td>science</td></tr>
52
+
53
+ <tr><td>chemistry</td></tr>
54
+
55
+ <tr><td>science and chemistry</td></tr>
56
+
57
+ </tbody>
58
+
59
+ </table>
60
+
61
+ </div>
62
+
63
+ ```
42
64
 
43
65
  ```JavaScript
44
66
 

1

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

2017/06/29 09:04

投稿

x_x
x_x

スコア13749

test CHANGED
@@ -33,3 +33,77 @@
33
33
  });
34
34
 
35
35
  ```
36
+
37
+
38
+
39
+ -- 6/29 追記 --
40
+
41
+ 基本的には変わっていませんが、TextNode取得箇所をXPathなしで書き直してみます。
42
+
43
+ ```JavaScript
44
+
45
+ function getTextNodes(parentElement) {
46
+
47
+ var nodes = [];
48
+
49
+ $(parentElement).contents().each(function(index, element) {
50
+
51
+ switch (element.nodeType) {
52
+
53
+ case document.TEXT_NODE:
54
+
55
+ nodes.push(element);
56
+
57
+ break;
58
+
59
+ case document.ELEMENT_NODE:
60
+
61
+ nodes = nodes.concat(getTextNodes(element));
62
+
63
+ break;
64
+
65
+ }
66
+
67
+ });
68
+
69
+ return nodes;
70
+
71
+ }
72
+
73
+
74
+
75
+ var list = {
76
+
77
+ science: '<div class="subject science">科学</div>',
78
+
79
+ chemistry: '<div class="subject chemistry">化学</div>'
80
+
81
+ };
82
+
83
+
84
+
85
+ $("div.col1").each(function(index, element) {
86
+
87
+ var nodes = getTextNodes(element);
88
+
89
+ for (var j = 0; j < nodes.length; j++) {
90
+
91
+ var node = nodes[j];
92
+
93
+ var text = node.nodeValue;
94
+
95
+ for (var i in list) {
96
+
97
+ text = text.replace(i, list[i]);
98
+
99
+ }
100
+
101
+
102
+
103
+ $(node).replaceWith($.parseHTML(text));
104
+
105
+ }
106
+
107
+ });
108
+
109
+ ```