Spec-Zone.ru › Web APIs

Документ: метод evaluate()

Базовая поддержка Широко доступна

Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Метод evaluate() интерфейса Document выбирает элементы на основе выражения XPath, переданного в параметрах.

Выражения XPath можно вычислять как в HTML, так и в XML документах.

Синтаксис

evaluate(xpathExpression, contextNode, namespaceResolver, resultType, result)

Параметры

xpathExpression

Строка, представляющая xpath для вычисления.

contextNode

Узловой контекст для запроса (см. спецификацию XPath). Обычно в качестве узла контекста передаётся document.

namespaceResolver

Функция, которая получит любые префиксы имен пространств имён и должна вернуть строку, представляющую URI пространства имён, связанного с этим префиксом. Она будет использоваться для разрешения префиксов в самом xpath, чтобы они могли быть сопоставлены с документом. Значение null обычно используется для HTML-документов или когда не используются префиксы имен пространств имён.

resultType

Целое число, соответствующее типу результата XPathResult для возврата. Возможны следующие значения:

ANY_TYPE (0)

Любой тип, который естественным образом получается из заданного выражения.

NUMBER_TYPE (1)

Результат, содержащий единственное число. Полезно, например, в выражении xpath с использованием функции count().

STRING_TYPE (2)

Результат, содержащий единственную строку.

BOOLEAN_TYPE (3)

Результат, содержащий единственное булево значение. Полезно, например, в выражении xpath с использованием функции not().

UNORDERED_NODE_ITERATOR_TYPE (4)

Результат, содержащий все узлы, соответствующие выражению. Узлы в результате не обязательно упорядочены так же, как и в документе.

Примечание: Результаты этого типа содержат ссылки на узлы в документе. Изменение узла приведет к аннулированию итератора. После изменения узла попытка итерироваться по результатам приведет к ошибке.

ORDERED_NODE_ITERATOR_TYPE (5)

Результат, содержащий все узлы, соответствующие выражению. Узлы в результате упорядочены так же, как и в документе.

Примечание: Результаты этого типа содержат ссылки на узлы в документе. Изменение узла приведет к аннулированию итератора. После изменения узла попытка итерироваться по результатам приведет к ошибке.

UNORDERED_NODE_SNAPSHOT_TYPE (6)

Результат, содержащий снимки всех узлов, соответствующих выражению. Узлы в результате не обязательно упорядочены так же, как и в документе.

Примечание: Результаты этого типа являются снимками, которые представляют собой по существу списки сопоставленных узлов. Вы можете изменять документ, изменяя узлы снимка. Изменение документа не аннулирует снимок; однако, если документ изменён, снимок может не соответствовать текущему состоянию документа, поскольку узлы могут быть перемещены, изменены, добавлены или удалены.

ORDERED_NODE_SNAPSHOT_TYPE (7)

Результат, содержащий снимки всех узлов, соответствующих выражению. Узлы в результате упорядочены так же, как и в документе.

Примечание: Результаты этого типа являются снимками, которые представляют собой по существу списки сопоставленных узлов. Вы можете изменять документ, изменяя узлы снимка. Изменение документа не аннулирует снимок; однако, если документ изменён, снимок может не соответствовать текущему состоянию документа, поскольку узлы могут быть перемещены, изменены, добавлены или удалены.

ANY_UNORDERED_NODE_TYPE (8)

Результат, содержащий любой единственный узел, соответствующий выражению. Узел не обязательно является первым узлом в документе, который соответствует выражению.

FIRST_ORDERED_NODE_TYPE (9)

Результат, содержащий первый узел в документе, соответствующий выражению.

result

Существующий XPathResult для использования в результатах. Если установлено null, метод создаст и вернёт новый XPathResult.

Возвращаемое значение

XPathResult, связывающий с выбранными узлами. Если result было null, это новый объект, если нет, то это тот же объект, что и переданный в качестве параметра result.

Примеры

Поиск всех заголовков H2 по XPath

const headings = document.evaluate(
  "/html/body//h2",
  document,
  null,
  XPathResult.ANY_TYPE,
  null,
);
/* Search the document for all h2 elements.
 * The result will likely be an unordered node iterator. */
let thisHeading = headings.iterateNext();
let alertText = "Level 2 headings in this document are:\n";
while (thisHeading) {
  alertText += `${thisHeading.textContent}\n`;
  thisHeading = headings.iterateNext();
}
alert(alertText); // Alerts the text of all h2 elements

Обратите внимание, в приведенном примере предпочтительнее более подробное xpath по сравнению с общими сокращениями, такими как //h2. Обычно более конкретные селекторы xpath, как в примере выше, обычно обеспечивают значительное улучшение производительности, особенно в очень больших документах. Это происходит потому, что вычисление запроса не тратит время на посещение ненужных узлов. Использование // обычно медленное, так как оно посещает каждый узел от корня и все подузлы, ищет возможные совпадения.

Дальнейшая оптимизация может быть достигнута тщательным использованием параметра контекста. Например, если вам известно, что искомое содержимое находится где-то внутри тега body, вы можете использовать это:

document.evaluate(".//h2", document.body, null, XPathResult.ANY_TYPE, null);

Обратите внимание, что в приведенном примере document.body используется в качестве контекста вместо document, поэтому xpath начинается с элемента body. (В этом примере "." важно, чтобы указать, что поиск должен начинаться с узла контекста, document.body. Если бы "." был опущен (оставлена //h2), запрос начался бы с корневого узла (html), что было бы более затратным.)

См. Введение в использование XPath в JavaScript для получения дополнительной информации.

Получение элемента по xml:id

Эта функция заменяет Document.getElementById(), когда вам нужно искать по xml:id.

function getElementByIdWrapper(xmlDoc, id) {
  return xmlDoc.evaluate(
    `//*[@xml:id="${id}"]`,
    xmlDoc,
    () => "http://www.w3.org/XML/1998/namespace",
    XPathResult.FIRST_ORDERED_NODE_TYPE,
    null,
  ).singleNodeValue;
}

Спецификации

Спецификация
DOM
# dom-xpathevaluatorbase-evaluate

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
evaluate 1 12 1 9 3 18 4 10.1 1 1.0 3

См. также

  • Document.createExpression()
  • XPathResult
  • Проверка поддержки браузером

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Document/evaluate

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API