javascript - XPath 表达式中的变量

标签 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>

最佳答案

很难跟踪开盘价和收盘价。相反,您可以使用 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 + "'))]]"

关于javascript - XPath 表达式中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56254926/

相关文章:

javascript - 如何在下拉菜单下创建下拉菜单

Java 不能引用非 final 变量

ruby - 范围值错误

xpath - 如何使用IMPORTXML提取带有/不带有ALT和标题标签的图像列表?

python - 带有 lxml 子路径的 XPath 谓词?

javascript - 我们可以在另一个事件上调用为一个事件编写的 JS 函数吗?

javascript - 如何取消一个被另一个函数调用的函数

javascript - 如何验证本地文件系统目录路径?

php - 如何在 PHP+HTML+SQL 中使用带空格的 GET 传递表单中的变量

PHP XML 库不返回 XPath 结果