XPath表达式中的变量

时间:2019-05-22 10:38:21

标签: javascript variables xpath

我在将变量放入XPath表达式时遇到困难。

我想创建一个搜索词,可以从输入中修改它,并在XPath表达式中使用它,但是下面的第二个示例失败了。

1。这有效

var nodesSnapshot = document.evaluate("//option[text()[not(contains(., 'test'))]]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

for (var i = 0; i < nodesSnapshot.snapshotLength; i++) {
  console.log(nodesSnapshot.snapshotItem(i));
}
<select>
  <option>cat</option>
  <option>test</option>
  <option>dog</option>
</select>

2。失败

var searchTerm = 'test';
var xPath = '"' + "//option[text()[not(contains(.,'" + searchTerm + "'))]]" + '"';
console.log(xPath);

var nodesSnapshot = document.evaluate(xPath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

for (var i = 0; i < nodesSnapshot.snapshotLength; i++) {
  console.log(nodesSnapshot.snapshotItem(i));
}
<select>
  <option>cat</option>
  <option>test</option>
  <option>dog</option>
</select>

1 个答案:

答案 0 :(得分:2)

很难跟踪开/闭引号。相反,您可以使用template literals

var searchTerm = 'test';
var xPath = `//option[text()[not(contains(., '${searchTerm}'))]]`;
console.log(xPath);

var nodesSnapshot = document.evaluate(xPath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

for (var i = 0; i < nodesSnapshot.snapshotLength; i++) {
  console.log(nodesSnapshot.snapshotItem(i));
}
<select>
  <option>cat</option>
  <option>test</option>
  <option>dog</option>
</select>

这是ES2015 +语法。如果要使用ES5解决方案,请使用:

var xPath = "//option[text()[not(contains(., '" + searchTerm + "'))]]"