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

質問編集履歴

3

解決した XPath 式を追記

2016/04/02 12:36

投稿

think49
think49

スコア18194

title CHANGED
File without changes
body CHANGED
@@ -31,9 +31,12 @@
31
31
  xpathResult = doc.evaluate('descendant::text()', contextNode, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null),
32
32
  i = 0,
33
33
  l = xpathResult.snapshotLength,
34
- textNodes = [];
34
+ textNodes = [],
35
+ textNode;
35
36
 
36
37
  while (i < l) {
38
+ textNode = xpathResult.snapshotItem(i++);
39
+
37
40
  if (textNode.data === data) {
38
41
  textNodes.push(textNode);
39
42
  }
@@ -69,6 +72,15 @@
69
72
 
70
73
  XPath 式のみで目的のテキストノードの `XpathResult` を参照する方法はないでしょうか。
71
74
 
75
+ ###回答
76
+
77
+ @ryls-nmm さんの回答により下記 XPath 式で解決できる事がわかりました(1つめの XPath 式は短縮形)。
78
+
79
+ ```
80
+ descendant::text()[.="JavaScript"]
81
+ descendant::text()[self::node()="JavaScript"]
82
+ ```
83
+
72
84
  ### 参考リンク
73
85
 
74
86
  - [Document.evaluate() - Web API インターフェイス | MDN](https://developer.mozilla.org/ja/docs/Web/API/document/evaluate)

2

質問内容の表現を修正

2016/04/02 12:36

投稿

think49
think49

スコア18194

title CHANGED
File without changes
body CHANGED
@@ -67,7 +67,7 @@
67
67
 
68
68
  ###質問
69
69
 
70
- XPath 式のみで目的のテキストノードを参照する方法はないでしょうか。
70
+ XPath 式のみで目的のテキストノードの `XpathResult` を参照する方法はないでしょうか。
71
71
 
72
72
  ### 参考リンク
73
73
 

1

XPath 式のコード修正

2016/04/01 11:19

投稿

think49
think49

スコア18194

title CHANGED
File without changes
body CHANGED
@@ -34,7 +34,9 @@
34
34
  textNodes = [];
35
35
 
36
36
  while (i < l) {
37
+ if (textNode.data === data) {
37
- textNodes.push(xpathResult.snapshotItem(i++));
38
+ textNodes.push(textNode);
39
+ }
38
40
  }
39
41
 
40
42
  return textNodes;
@@ -65,7 +67,7 @@
65
67
 
66
68
  ###質問
67
69
 
68
- XPath 式のみでテキストノードのリスト生成する方法はないでしょうか。
70
+ XPath 式のみで目的のテキストノード参照する方法はないでしょうか。
69
71
 
70
72
  ### 参考リンク
71
73