我在将变量放入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>
答案 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 + "'))]]"