我在将变量放入我的 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/