Obwohl viele Browser über $x(xPath)
in die Konsole integriert ist, finden Sie hier eine Zusammenstellung der nützlichen, aber hart kodierten Schnipsel aus Einführung in die Verwendung von XPath in JavaScript bereit zur Verwendung in Skripten:
Schnappschuss
Dies ergibt einen einmaligen Schnappschuss der xpath-Ergebnismenge. Die Daten können nach DOM-Mutationen veraltet sein.
const $x = xp => {
const snapshot = document.evaluate(
xp, document, null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null
);
return [...Array(snapshot.snapshotLength)]
.map((_, i) => snapshot.snapshotItem(i))
;
};
console.log($x('//h2[contains(., "foo")]'));
<h2>foo</h2>
<h2>foobar</h2>
<h2>bar</h2>
Erster bestellter Knoten
const $xOne = xp =>
document.evaluate(
xp, document, null,
XPathResult.FIRST_ORDERED_NODE_TYPE, null
).singleNodeValue
;
console.log($xOne('//h2[contains(., "foo")]'));
<h2>foo</h2>
<h2>foobar</h2>
<h2>bar</h2>
Iterator
Beachten Sie jedoch, dass die Iteration ungültig wird, wenn das Dokument zwischen den Iterationen verändert wird (der Dokumentenbaum wird geändert) und die invalidIteratorState
Eigenschaft von XPathResult
wird eingestellt auf true
und eine NS_ERROR_DOM_INVALID_STATE_ERR
wird eine Ausnahme ausgelöst.
function *$xIter(xp) {
const iter = document.evaluate(
xp, document, null,
XPathResult.ORDERED_NODE_ITERATOR_TYPE, null
);
for (;;) {
const node = iter.iterateNext();
if (!node) {
break;
}
yield node;
}
}
// dump to array
console.log([...$xIter('//h2[contains(., "foo")]')]);
// return next item from generator
const xpGen = $xIter('//h2[text()="foo"]');
console.log(xpGen.next().value);
<h2>foo</h2>
<h2>foobar</h2>
<h2>bar</h2>