使用 document.evaluate() 选择包含撇号的 HTML 元素

问题描述 投票:0回答:1

我正在尝试使用

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&nbsp;g</p>
<p>1'000&nbsp;g</p>

document.evaluate() 中使用 xpath 表达式选择包含撇号的元素的正确方法是什么?

javascript html xpath
1个回答
1
投票

要在 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&nbsp;g</p>
<p>1'000&nbsp;g</p>

© www.soinside.com 2019 - 2024. All rights reserved.