使用 JavaScript 通过 XPath 获取元素 - 示例
使用 document.evaluate()
方法通过 XPath
获取元素。 该方法根据提供的 XPath 表达式和提供的参数返回 XPathResult。
以下是本文示例的 HTML。
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> </head> <body> <div> <p>Hello world</p> </div> <div> <p>Apple, Banana, Kiwi</p> </div> <script src="index.js"></script> </body> </html>
这是相关的 JavaScript。
// ✅ Get specific `p` element
const firstP = document.evaluate(
'/html/body/div[2]/p',
document,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null,
).singleNodeValue;
console.log(firstP); // 👉️ p
console.log(firstP.textContent); // 👉️ "Apple, Banana, Kiwi"
// -----------------------
// ✅ Get all P elements
const allParagraphs = document.evaluate(
'/html/body//p',
document,
null,
XPathResult.ANY_TYPE,
null,
);
console.log(allParagraphs);
let currentParagraph = allParagraphs.iterateNext();
while (currentParagraph) {
console.log(currentParagraph.textContent);
currentParagraph = allParagraphs.iterateNext();
}
我们使用 document.evaluate
方法来获取基于 XPath 表达式的 XPathResult。
第一个示例显示如何获取单个节点,而第二个示例获取节点集合并对其进行迭代。
document.evaluate
方法采用以下参数:
- xpathExpression - 要计算的 XPath
- contextNode - 查询的上下文节点(通常是文档)
- namespaceResolver - 在处理 HTML 文档时应该为 null
- resultType - 要返回的 XPathResult 的类型。
- result - 应该为空
请注意
,在第一个示例中,我们访问了XPathResult
对象的singleNodeValue
属性。
// ✅ Get specific `p` element
const firstP = document.evaluate(
'/html/body/div[2]/p',
document,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null,
).singleNodeValue;
console.log(firstP); // 👉️ p
console.log(firstP.textContent); // 👉️ "Apple, Banana, Kiwi"
singleNodeValue
属性返回第一个找到的与 XPath 表达式匹配的节点。
如果节点集为空,这将评估为 null。
示例中要注意的另一件事是,我们指定了 XPathResult.FIRST_ORDERED_NODE_TYPE
的结果类型。
如果查看 XPath 结果类型表,该结果类型会返回与提供的 XPath 表达式匹配的任何单个节点。
在第二个示例中,我们使用 XPath 表达式获取文档中的所有 p 元素并迭代结果。
// ✅ Get all P elements
const allParagraphs = document.evaluate(
'/html/body//p',
document,
null,
XPathResult.ANY_TYPE,
null,
);
let currentParagraph = allParagraphs.iterateNext();
while (currentParagraph) {
// 👇️ "Hello world", "Apple, Banana, Kiwi"
console.log(currentParagraph.textContent);
currentParagraph = allParagraphs.iterateNext();
}
这次我们将 XPAthResult.ANY_TYPE
设置为结果类型,它返回所提供的 XPath 表达式的任何类型结果。
返回的 XPathResult
对象是一组匹配节点,其行为类似于迭代器。
我们可以使用 XPathResult
对象的 iterateNext()
方法访问各个节点。
一旦我们遍历了所有节点,iterateNext()
方法将返回 null。
请注意
,修改节点会使迭代器失效。 修改节点后,尝试迭代结果会产生错误。
相关文章
使用 CSS 和 JavaScript 制作文本闪烁
发布时间:2023/04/28 浏览次数:146 分类:CSS
-
本文提供了使用 CSS、JavaScript 和 jQuery 使文本闪烁的详细说明。
在 PHP 变量中存储 Div Id 并将其传递给 JavaScript
发布时间:2023/03/29 浏览次数:69 分类:PHP
-
本文教导将 div id 存储在 PHP 变量中并将其传递给 JavaScript 代码。
在 JavaScript 中从字符串中获取第一个字符
发布时间:2023/03/24 浏览次数:93 分类:JavaScript
-
在本文中,我们将看到如何使用 JavaScript 中的内置方法获取字符串的第一个字符。
在 JavaScript 中获取字符串的最后一个字符
发布时间:2023/03/24 浏览次数:141 分类:JavaScript
-
本教程展示了在 javascript 中获取字符串最后一个字符的方法