Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Dokument: evaluate()-Methode
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
Dieevaluate()-Methode desDocument-Interfaces wählt Elemente basierend auf demXPath-Ausdruck aus, der in den Parametern angegeben ist.
XPath-Ausdrücke können sowohl auf HTML- als auch auf XML-Dokumente angewandt werden.
In diesem Artikel
Syntax
evaluate(xpathExpression, contextNode, namespaceResolver, resultType, result)Parameter
xpathExpressionEin String, der das zu evaluierendexpath darstellt.
contextNodeDerKontextknoten für die Abfrage.Es ist üblich,
documentals Kontextknoten zu übergeben.namespaceResolverEine Funktion, die alle Namespace-Präfixe übergeben bekommtund einen String zurückgeben sollte, der den mit diesem Präfix verbundenen Namespace-URI darstellt.Sie wird verwendet, um Präfixe innerhalb desxpath selbst aufzulösen,sodass diese mit dem Dokument übereinstimmen können.Der Wert
nullist üblich für HTML-Dokumente oder wenn keine Namespace-Präfixe verwendet werden.resultTypeEine Ganzzahl, die dem zurückzugebenden Ergebnistyp
XPathResultentspricht.Folgende Werte sind möglich:ANY_TYPE(0)Jeder Typ, der sich natürlich aus dem angegebenen Ausdruck ergibt.
NUMBER_TYPE(1)Eine Ergebnismenge, die eine einzelne Zahl enthält. Nützlich zum Beispiel in einemxpath-Ausdruck, der die
count()-Funktion verwendet.STRING_TYPE(2)Eine Ergebnismenge, die einen einzelnen String enthält.
BOOLEAN_TYPE(3)Eine Ergebnismenge, die einen einzelnen booleschen Wert enthält. Nützlich, zum Beispiel, in einemxpath-Ausdruck, der die
not()-Funktion verwendet.UNORDERED_NODE_ITERATOR_TYPE(4)Eine Ergebnismenge, die alle mit dem Ausdruck übereinstimmenden Knoten enthält. Die Knotenin der Ergebnismenge sind nicht unbedingt in der Reihenfolge, wie sie im Dokument erscheinen.
Hinweis:Ergebnisse dieses Typs enthalten Verweise auf Knoten im Dokument.Eine Änderung eines Knotens macht den Iterator ungültig.Nach einer Änderung eines Knotens wird beim Versuch, durch die Ergebnisse zu iterieren, ein Fehler auftreten.
ORDERED_NODE_ITERATOR_TYPE(5)Eine Ergebnismenge, die alle mit dem Ausdruck übereinstimmenden Knoten enthält. Die Knotenin der Ergebnismenge befinden sich in der Reihenfolge, wie sie im Dokument erscheinen.
Hinweis:Ergebnisse dieses Typs enthalten Verweise auf Knoten im Dokument.Eine Änderung eines Knotens macht den Iterator ungültig.Nach einer Änderung eines Knotens wird beim Versuch, durch die Ergebnisse zu iterieren, ein Fehler auftreten.
UNORDERED_NODE_SNAPSHOT_TYPE(6)Eine Ergebnismenge, die Schnappschüsse aller mit demAusdruck übereinstimmenden Knoten enthält. Die Knoten in der Ergebnismengesind nicht unbedingt in der Reihenfolge, wie sie im Dokument erscheinen.
Hinweis:Ergebnisse dieses Typs sind Schnappschüsse, die im Wesentlichen Listen von übereinstimmenden Knoten sind.Sie können Änderungen am Dokument vornehmen, indem Sie Schnappschussknoten ändern.Änderungen am Dokument machen den Schnappschuss nicht ungültig;jedoch, wenn das Dokument geändert wird, kann der Schnappschuss nicht mit dem aktuellen Zustand des Dokuments übereinstimmen,da Knoten verschoben, geändert, hinzugefügt oder entfernt worden sein können.
ORDERED_NODE_SNAPSHOT_TYPE(7)Eine Ergebnismenge, die Schnappschüsse aller mit demAusdruck übereinstimmenden Knoten enthält. Die Knoten in der Ergebnismengesind in der Reihenfolge, wie sie im Dokument erscheinen.
Hinweis:Ergebnisse dieses Typs sind Schnappschüsse, die im Wesentlichen Listen von übereinstimmenden Knoten sind.Sie können Änderungen am Dokument vornehmen, indem Sie Schnappschussknoten ändern.Änderungen am Dokument machen den Schnappschuss nicht ungültig;jedoch, wenn das Dokument geändert wird, kann der Schnappschuss nicht mit dem aktuellen Zustand des Dokuments übereinstimmen,da Knoten verschoben, geändert, hinzugefügt oder entfernt worden sein können.
ANY_UNORDERED_NODE_TYPE(8)Eine Ergebnismenge, die einen beliebigen einzelnen Knoten enthält, der mit dem Ausdruck übereinstimmt. DerKnoten ist nicht unbedingt der erste Knoten im Dokument, der mit demAusdruck übereinstimmt.
FIRST_ORDERED_NODE_TYPE(9)Eine Ergebnismenge, die den ersten Knoten im Dokument enthält, der mit demAusdruck übereinstimmt.
resultEin bestehendes
XPathResult, das für die Ergebnisse verwendet werden soll. Wenn aufnullgesetzt, wird die Methode ein neuesXPathResulterstellen und zurückgeben.
Rückgabewert
EinXPathResult, das auf die ausgewählten Knoten verweist. Wennresultnull war, ist es ein neues Objekt, andernfalls ist es dasselbe Objekt, das alsresult-Parameter übergeben wurde.
Beispiele
>Finden aller H2-Überschriften mit 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 elementsIn dem obigen Beispiel wird ein ausführlicheresxpath gegenüber gängigen Abkürzungenwie//h2 bevorzugt. Im Allgemeinen bieten spezifischerexpath-Selektoren, wie im obigenBeispiel, eine signifikante Leistungsverbesserung, besonders bei sehr großenDokumenten. Dies liegt daran, dass die Evaluierung der Abfrage keine Zeitdamit verschwendet, unnötige Knoten zu besuchen. Die Verwendung von // ist im Allgemeinen langsam, da esjedenKnoten vom Stamm und alle Unterknoten besucht, um nach möglichen Übereinstimmungen zu suchen.
Eine weitere Optimierung kann durch sorgfältigen Einsatz des Kontextparameters erreicht werden. ZumBeispiel, wenn Sie wissen, dass der gesuchte Inhalt irgendwo innerhalb des Body-Tags ist,können Sie dies verwenden:
document.evaluate(".//h2", document.body, null, XPathResult.ANY_TYPE, null);Beachten Sie, dass im obigen Beispieldocument.body als Kontext stattdocument verwendet wird, sodass dasxpath vom Body-Element startet. (In diesem Beispiel ist das"." wichtig, um anzuzeigen, dass die Abfrage vomKontextknoten, document.body, starten soll. Wenn das "." weggelassen würde (also//h2)würde die Abfrage vom Wurzelknoten (html) starten, wasviel verschwenderischer wäre.)
Weitere Informationen finden Sie unterEinführung in die Verwendung von XPath in JavaScript.
Element abrufen nach xml:id
Diese Funktion ist ein Ersatz fürDocument.getElementById() für den Fall, dass Sie nachxml:id suchen müssen.
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;}Spezifikationen
| Specification |
|---|
| DOM> # dom-xpathevaluatorbase-evaluate> |