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 July 2015.
Die evaluate()
-Methode der Document
-Schnittstelle wählt Elemente basierend auf dem im Parameter angegebenen XPath-Ausdruck aus.
XPath-Ausdrücke können sowohl auf HTML- als auch auf XML-Dokumenten ausgewertet werden.
Syntax
evaluate(xpathExpression, contextNode, namespaceResolver, resultType, result)
Parameter
xpathExpression
-
Ein String, der das zu evaluierende XPath repräsentiert.
contextNode
-
Der Kontextknoten für die Abfrage (siehe die XPath-Spezifikation). Es ist üblich,
document
als Kontextknoten zu übergeben. namespaceResolver
-
Eine Funktion, die für alle Namensraumpräfixe aufgerufen wird und einen String zurückgeben soll, der den Namespace-URI darstellt, der diesem Präfix zugeordnet ist. Er wird verwendet, um Präfixe innerhalb des XPath selbst aufzulösen, damit sie mit dem Dokument übereinstimmen. Der Wert
null
ist üblich für HTML-Dokumente oder wenn keine Namensraumpräfixe verwendet werden. resultType
-
Eine Ganzzahl, die mit dem Typ des zu retournierenden
XPathResult
-Ergebnisses übereinstimmt. Die folgenden Werte sind möglich:ANY_TYPE
(0
)-
Egal welcher Typ, der natürlich aus dem gegebenen Ausdruck resultiert.
NUMBER_TYPE
(1
)-
Ein Ergebnisset, das eine einzelne Zahl enthält. Nützlich zum Beispiel in einem XPath-Ausdruck mit der
count()
-Funktion. STRING_TYPE
(2
)-
Ein Ergebnisset, das einen einzelnen String enthält.
BOOLEAN_TYPE
(3
)-
Ein Ergebnisset, das einen einzelnen booleschen Wert enthält. Nützlich, zum Beispiel, ein XPath-Ausdruck mit der
not()
-Funktion. UNORDERED_NODE_ITERATOR_TYPE
(4
)-
Ein Ergebnisset, das alle Knoten enthält, die mit dem Ausdruck übereinstimmen. Die Knoten im Ergebnisset sind nicht unbedingt in der gleichen Reihenfolge, in der sie im Dokument erscheinen.
Hinweis: Ergebnisse dieses Typs enthalten Verweise auf Knoten im Dokument. Das Ändern eines Knotens macht den Iterator ungültig. Nach dem Ändern eines Knotens führt ein Versuch, die Ergebnisse zu durchlaufen, zu einem Fehler.
ORDERED_NODE_ITERATOR_TYPE
(5
)-
Ein Ergebnisset, das alle Knoten enthält, die mit dem Ausdruck übereinstimmen. Die Knoten im Ergebnisset sind in der gleichen Reihenfolge, wie sie im Dokument erscheinen.
Hinweis: Ergebnisse dieses Typs enthalten Verweise auf Knoten im Dokument. Das Ändern eines Knotens macht den Iterator ungültig. Nach dem Ändern eines Knotens führt ein Versuch, die Ergebnisse zu durchlaufen, zu einem Fehler.
UNORDERED_NODE_SNAPSHOT_TYPE
(6
)-
Ein Ergebnisset, das Schnappschüsse aller Knoten enthält, die mit dem Ausdruck übereinstimmen. Die Knoten im Ergebnisset sind nicht unbedingt in der gleichen Reihenfolge, in der sie im Dokument erscheinen.
Hinweis: Ergebnisse dieses Typs sind Momentaufnahmen, die im Wesentlichen Listen von übereinstimmenden Knoten sind. Sie können Änderungen am Dokument vornehmen, indem Sie Momentaufnahme-Knoten ändern. Änderungen am Dokument machen die Momentaufnahme nicht ungültig; jedoch, wenn das Dokument geändert wird, muss die Momentaufnahme nicht mehr dem aktuellen Stand des Dokuments entsprechen, da Knoten verschoben, verändert, hinzugefügt oder entfernt worden sein können.
ORDERED_NODE_SNAPSHOT_TYPE
(7
)-
Ein Ergebnisset, das Schnappschüsse aller Knoten enthält, die mit dem Ausdruck übereinstimmen. Die Knoten im Ergebnisset sind in der gleichen Reihenfolge wie sie im Dokument erscheinen.
Hinweis: Ergebnisse dieses Typs sind Momentaufnahmen, die im Wesentlichen Listen von übereinstimmenden Knoten sind. Sie können Änderungen am Dokument vornehmen, indem Sie Momentaufnahme-Knoten ändern. Änderungen am Dokument machen die Momentaufnahme nicht ungültig; jedoch, wenn das Dokument geändert wird, muss die Momentaufnahme nicht mehr dem aktuellen Stand des Dokuments entsprechen, da Knoten verschoben, verändert, hinzugefügt oder entfernt worden sein können.
ANY_UNORDERED_NODE_TYPE
(8
)-
Ein Ergebnisset, das einen beliebigen einzelnen Knoten enthält, der mit dem Ausdruck übereinstimmt. Der Knoten muss nicht unbedingt der erste Knoten im Dokument sein, der mit dem Ausdruck übereinstimmt.
FIRST_ORDERED_NODE_TYPE
(9
)-
Ein Ergebnisset, das den ersten Knoten im Dokument enthält, der mit dem Ausdruck übereinstimmt.
result
-
Ein vorhandenes
XPathResult
, das für die Ergebnisse verwendet werden soll. Wennnull
festgelegt ist, erstellt und gibt die Methode ein neuesXPathResult
zurück.
Rückgabewert
Ein XPathResult
, das auf die ausgewählten Knoten verweist. Wenn result
null
war, ist es ein neues Objekt, andernfalls ist es dasselbe Objekt wie das, das als result
-Parameter übergeben wurde.
Beispiele
Alle H2-Überschriften mit XPath finden
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
Beachten Sie, dass im obigen Beispiel ein ausführlicheres XPath bevorzugt wird gegenüber allgemeinen Abkürzungen wie //h2
. Im Allgemeinen liefern spezifischere XPath-Selektoren, wie im obigen
Beispiel, gewöhnlich einen erheblichen Performancegewinn, insbesondere bei sehr großen
Dokumenten. Dies liegt daran, dass die Auswertung der Abfrage keine Zeit
damit verschwendet, unnötige Knoten zu besuchen. Die Verwendung von // ist generell langsam, da jeder
Knoten vom Root und allen Unterknoten gesucht wird, um mögliche Übereinstimmungen zu finden.
Weitere Optimierungen können durch sorgfältige Verwendung des Kontextparameters erreicht werden. Zum Beispiel, wenn Sie wissen, dass der Inhalt, den Sie suchen, irgendwo im body-Tag ist, können Sie dies verwenden:
document.evaluate(".//h2", document.body, null, XPathResult.ANY_TYPE, null);
Beachten Sie im obigen Beispiel, dass document.body
als Kontext verwendet wurde anstelle von
document
, sodass das XPath vom body-Element aus beginnt. (In diesem Beispiel ist das
"."
wichtig, um anzugeben, dass die Abfrage vom
Kontextknoten, document.body, starten soll. Wenn das Symbol "." ausgelassen würde (so dass //h2
übrig bleibt), würde die
Abfrage vom Root-Knoten (html
) starten, was verschwenderischer wäre.)
Siehe Einführung in die Verwendung von XPath in JavaScript für weitere Informationen.
Element per xml:id abrufen
Diese Funktion ist ein Ersatz für Document.getElementById()
, wenn Sie stattdessen nach xml: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 Standard # dom-xpathevaluatorbase-evaluate |
Browser-Kompatibilität
BCD tables only load in the browser