0

我正在尝试在 HTML5 帮助系统中动态修改 Adob​​e 的 RoboHelp 2017 生成的某些文本中的字符串。

我正在尝试查找文本“In this Topic”是否存在于对象标签后面的段落中,其中对象标签的 ID 为 MapCtrl。

这是从 Firefox 的 Inspector 复制的相关 HTML 的片段:

<object id="MapCtrl" classid="CLSID:A8ECFBF5-08CC-4065-BD74-0FAD1EA61317" data-rhtags="1" class="" width="1" height="1">
</object>
<p style="font-family:Arial;font-size:12pt;font-weight: normal;font-style: normal;text-decoration: none;" data-rhtags="1" class="" align="left">In&nbsp;this&nbsp;Topic&nbsp;<a class="dropspot" href="javascript:TextPopup(this)" id="MTHotSpot46267"><span class="MTText" style="display: none;">Show</span><span class="MTText">Hide</span></a></p>

我可以使用以下 JS 代码处理所需的文本:

const minitoc = document.querySelector('#MapCtrl + p');
const text = minitoc.textContent;
console.log (typeof text);
console.log(text);
console.log(text.includes('In this Topic'));
console.log(text.indexOf('In this Topic'));

在我的控制台中,我可以验证我的文本变量确实是字符串类型。我还可以在控制台中直观地看到日志输出中存在“In this Topic”。但是,我的 .includes 方法总是返回 false。(.indexOf 也不起作用)

控制台输出

我认为它可能是因为&nbsp;在 HTML 中添加到该字符串中的代码而失败了,但我也尝试了这种变体,但这也不起作用:

console.log(text.includes('In&nbsp;this&nbsp;Topic'));

奇怪的是,它可以很好地找到单个单词。例如,这将返回 true:

console.log(text.includes('Topic'));

但是每当我尝试添加一个空格来搜索整个短语“In this Topic”时,它都会返回 false。

我在网上搜索了一个解决方案,并研究了 MDN 部分的.includes 方法。但无法弄清楚为什么它返回false。

预先感谢您的帮助。

4

2 回答 2

2

includes方法搜索字符串中的文本

它不解析任何 HTML。

如果字符串包含不间断空格,那么您需要一个实际的不间断空格 ( )一个 ( ) 的 JavaScript 转义序列\xa0。您不能使用 HTML 实体 ( &nbsp;) 或常规空格 ( )。

于 2021-12-13T17:54:34.490 回答
0

如果您遍历文本以打印字符的 Unicode 值,看看会发生什么可能会很有趣,这可能会导致一些有价值的信息

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt

于 2021-12-13T18:05:46.673 回答