Переменная в выражении XPath - PullRequest
1 голос
/ 22 мая 2019

У меня проблемы с размещением переменной в моем выражении 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 Ответ

2 голосов
/ 22 мая 2019

Трудно следить за открытием и закрытием кавычек. Вместо этого вы можете использовать шаблонные литералы :

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 + "'))]]"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...