我正在尝试使用
document.evaluate()选择包含
1'000 g
的元素。问题是撇号。我尝试使用 \u0027
、''
、\'
、\\'
和 '
,但它们要么触发无效的 xpath 表达式错误,要么不返回任何元素。
const items1 = document.evaluate(
"//p[contains(normalize-space(.), '1000\u00a0g')]",
document,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null,
);
console.log("item1", items1.snapshotItem(0).textContent);
const items2 = document.evaluate(
"//p[contains(normalize-space(.), '1'000\u00a0g')]",
document,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null,
);
console.log("item2", items2.snapshotItem(0).textContent);
<p>1000 g</p>
<p>1'000 g</p>
在 document.evaluate() 中使用 xpath 表达式选择包含撇号的元素的正确方法是什么?
要在 XPath 的“包含”部分中包含撇号,您需要将其用作文字字符并将要查找的字符串括在双引号中,您必须使用
\"
从外部字符串中转义:
const items1 = document.evaluate(
"//p[contains(normalize-space(.), '1000\u00a0g')]",
document,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null,
);
console.log("item1", items1.snapshotItem(0).textContent);
const items2 = document.evaluate(
"//p[contains(normalize-space(.), \"1'000\u00a0g\")]",
document,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null,
);
console.log("item2", items2.snapshotItem(0).textContent);
<p>1000 g</p>
<p>1'000 g</p>