替换非渲染(非显示)元素文本中的 ↵ (\n)

2024-03-16

我正在编写一个解析器,从隐藏的 iframe 中获取数据。

在文本中我需要替换\n(↵) 个字符(空间)。 我用它来完成这项任务 -text.replace(/\n/gi, " ")。 但是,它仅适用于可见元素(即没有display: none)。 如果该元素不可见(display: none) 新行就消失了并且没有得到任何替代。

HTML 示例:

<div data-custom="languages">
    <div>
        <div>
            <h2>
                <span>Just a text that will be removed</span>
            </h2>
            <p>A - b</p>
            <p>c - d</p>
        </div>
    </div>
</div>

JS示例:

visibleIframe.style.display = "block";
invisibleIframe.style.display = "none";

const visibleDivWithNestedDivs = visibleIframe.querySelector(`[data-custom="languages"]`);
const invisibleDivWithNestedDivs = invisibleIframe.querySelector(`[data-custom="languages"]`);

const visibleText = visibleDivWithNestedDivs.innerText; // "A - b↵c - d"
const invisibleText = invisibleDivWithNestedDivs.innerText; // "A - b↵c - d"

console.log(visibleText.replace(/\n/gi, " ")); // "A - b c - d" (expected result)
console.log(invisibleText.replace(/\n/gi, " ")); // "A - bc - d" (unexpected result, no space between "b" and "c")

我尝试过的:

.replace(/\n/gi, " ")
.replace(/\r\n/gi, " ")
.replace(/↵/gi, " ")
.replace(/↵↵/gi, " ") // in some cases there was two of this.
.split("↵").join(" ") 
.split("\n").join(" ")
white-space: pre
white-space: pre-wrap

你测试了吗?

我99%确定这是因为display: none。我测试了它,不同的 iframe 显示给了我不同的结果。

文本内容

我不需要textContent因为这会返回一个没有文本的文本\n人物。我用innerText.

问题:

  1. 意想不到的结果难道不是因为那样吗display: none?
  2. 我该怎么做才能达到预期的效果?

首先,让我们根据您提供的示例澄清一些您似乎存在的误解。

是一个 unicode 字符,描述为带有角向左的向下箭头。当然,它可以很好地直观地表示换行符或 Return/Enter 键,但它在代码中没有任何意义。如果您在正则表达式中使用此符号,则正则表达式将尝试匹配包含箭头符号的文本。

在大多数编程语言中,\n字符串中的 表示换行符,您不必担心它在幕后的表示方式,无论是 CR、LF 还是两者兼而有之。所以我不会使用\r在 JavaScript 中。

.replace(/\n/gi, " ")是一个完全有效的选项,具体取决于您想要做什么。但是,您可能想要替换任何包含换行符的空白序列。在这种情况下,我会用这个来代替:.replace(/\s+/, " "). The \sRegExp 中的特殊代码匹配任何类型的空白,包括换行符。添加一个+使其匹配任何空白序列。使用这个将确保像这样的字符串"a \n \n b"变成"a b".

现在正则表达式问题已经解决了,让我们看一下innerText。根据HTML 生活标准 https://html.spec.whatwg.org/multipage/dom.html#the-innertext-idl-attribute我通过查看发现innerText 的 MDN 文章 https://developer.mozilla.org/en-US/docs/Web/API/Node/innerText, the innerText属性是用户从该元素复制粘贴文本时将获得的近似值。它的定义如下:

如果未呈现此元素,或者用户代理是非 CSS 用户代理,则返回与此元素上的 textContent IDL 属性相同的值。注意:此步骤可能会产生令人惊讶的结果,因为当在未呈现的元素上访问 innerText 属性时,会返回其文本内容,但在正在呈现的元素上访问时,其所有未呈现的子元素都会返回他们的文本内容被忽略。

这解释了为什么可见元素和隐藏元素之间可能存在差异。至于换行符的数量,确定字符串中有多少换行符的算法是在标准页 https://html.spec.whatwg.org/multipage/dom.html#the-innertext-idl-attribute这非常令人困惑,这就是为什么我建议不要将您的逻辑基于此函数的行为。innerText是一个近似值。

我建议看一下文本内容 https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent,不受 CSS 影响。

总结一下这个很长的解释:

  1. Yes, display: none确实影响innerText
  2. 我可能会用foo.textContent.replace(/\s+/g, " ")取决于你的目标是什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

替换非渲染(非显示)元素文本中的 ↵ (\n) 的相关文章

  • Iphone 上的 Javascript 日期解析

    我正在开发一个针对移动设备的离线 Javascript 网站 iPhone 就是这样的一种移动设备 我正在尝试从 REST API JSON 对象的成员 解析日期 我在用着 Date parse 2010 03 15 10 30 00 这适
  • 检查复选框是否被选中? [复制]

    这个问题在这里已经有答案了 如何通过 jQuery 检查复选框是否被选中 我可以只向元素添加 ID 或类并执行此操作吗 if element val 1 do stuff if element is checked checkbox is
  • 如何从 JavaScript 触发 ASP.NET Core 客户端验证

    有没有办法从 JavaScript 触发 ASP NET Core 客户端验证 我有一个 Razor Pages 页面 其中包含
  • javascript - 动态变量

    您好 我正在尝试创建动态变量 但它说 变量 v0 到 v5 未定义 td each function i eval var v i this html 任何帮助将不胜感激 这听起来是个坏主意 你有什么理由不能这样做吗 var tdHtml
  • 使用 ES6 静态函数时,我得到“没有这样的方法”

    我正在尝试为我在 React Native 中工作的项目创建一个包含静态函数的 utils 类 我读到了如何在 StackOverFlow 中创建静态函数question https stackoverflow com questions
  • Javascript:打乱数组中的对象组

    我有一个对象数组 我已按键排序 group如下 使得所有具有相同值的对象group在索引中彼此相邻data 例如 var data foo cat group house foo cat group house foo cat group
  • 开始使用 Three.js 中的行进立方体

    我是 Three js 的新手 正在寻找教程来帮助我开始了解如何在 Three js 中使用 Marching Cubes 到目前为止 我在 Three js 中看到的一些使用它的项目对我来说有点复杂 所以一个简单的教程会很好 谢谢 像您一
  • 是否可以向 JavaScript 函数发送可变数量的参数?

    是否可以从数组向 JavaScript 函数发送可变数量的参数 var arr a b c var func function debug alert arguments length for arg in arguments alert
  • 如何像在浏览器中一样检索准确的 HTML

    我正在使用 Python 脚本来呈现网页并检索其 HTML 它适用于大多数页面 但对于其中一些页面 检索到的 HTML 不完整 我不太明白为什么 这是我用来废弃此页面的脚本 由于某种原因 每个产品的链接不在 HTML 中 Link http
  • 如何在javascript中删除一组表情符号中的最后一个表情符号?

    假设我的字符串中有 3 个表情符号 字符串中没有任何空格或除表情符号之外的任何其他字符 如何删除javascript中最后一个表情符号 下面的答案不使用任何特殊的包并安全地删除最后一个表情符号 function safeEmojiBacks
  • 如何在没有 DOM 的情况下将 javascript 作为 node.js 脚本运行?

    https github com jasondavies d3 cloud https github com jasondavies d3 cloud是一个使用 D3 库的 javascript 文字云 这是一个交互式演示 http www
  • 如何保存包含框架/iframe 的完整 html 页面?

    在网页抓取期间 我想将当前页面的 html 保存到文件中以供以后调试 browser html在大多数情况下有帮助 但是当页面包含 iframe frame 时 它 的内容不会返回browser html 我必须用类似的东西单独得到它bro
  • 什么是闭包编译器?

    如果您不知道我在说什么 请查看以下内容 http closure compiler appspot com home http closure compiler appspot com home 这是一个 JavaScript 压缩器 在他
  • 如何制作实时jquery效果?

    我想制作一个实时提要阅读器 并且我想要一个解决方案 使新项目无需刷新页面即可出现 并且具有像friendfeed一样的滚动效果 你可以在这里看到我在说什么 http www vimeo com 4029954 http www vimeo
  • 如何在javascript中设置从数据库输入的最大数量?

    我希望根据数据库中的数量设置 输入类型 数字 中输入的最大数量 目前 我正在尝试让它在数据最大的基础上工作 然后再尝试从数据库中获取最大值 但它似乎无法工作 之前已经在这里问过 但我仍然无法理解 在 php javascript 中设置数据
  • html 下钻下拉所选值未插入 MYSQL

    我有两个下拉列表 首先从数据库下拉填充 根据第一个下拉列表的选定值从数据库填充第二个下拉列表 document ready function c change function var c1 c selected text if c1 aj
  • RemoveEventListener 在 Firefox 版本 58 中不起作用

    但它在 Chrome 中有效 这是我的 UI EventBus 代码 原型 addEventListener方法是一样的 只不过remove换成了add UI EventBus removeEventListener function ob
  • 在javascript中我们如何识别一个对象是Hash还是Array?

    我的 JSON 调用的输出可以是数组或哈希 我如何区分这两者 现代浏览器支持Array isArray obj method See MDN https developer mozilla org en US docs Web JavaSc
  • 将响应式网格布局转换为 Plotly Dash

    我是一个非常活跃的 Dash 用户 我开始发现 Dash 使用中存在很多限制 并且我意识到有关如何将组件转换为 Dash 的信息 内容绝对有限 并且示例过时且非常简单 并且我对 Javascript 或 React 几乎没有任何了解 我完全
  • IE 中带有“删除”方法的 jQuery.ajax 问题

    我有一个页面 用户可以使用按钮编辑各种内容并选择触发 ajax 调用 特别是 一个操作会导致远程调用一个 url 其中包含一些数据和 放置 请求 这 因为我使用的是宁静的 Rails 后端 会触发我的更新操作 我还有一个删除按钮 它调用相同

随机推荐

  • AngularJS:使用具有可选参数的 URL 进行路由

    我的 app js 中有一个包含路由的 URL 假设网址是 api opt1 opt2 opt3 users 我希望我的网址在任何情况下都能工作 我应该能够忽略可选参数 opt1 opt2 或 opt3 可能是全部或几个 我怎样才能做到这一
  • 无法从 {2,3,4,5,6,7,8} 获得的最小整数 (Mathematica)

    我正在尝试使用 Mathematica 解决以下问题 从集合中无法获得的最小正整数是多少 2 3 4 5 6 7 8 通过算术运算 求幂和括号 集合中的每个数字必须仅使用一次 不允许一元运算 例如 如果不使用 0 则 1 无法转换为 1 例
  • 如何实现简单的 Android OAuth 和服务器 API [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个 Android 应用程序 它将数据发送到我的网络服务器 数据由 php 处理并存储在 mysql 数据库中 出于安全原因 我
  • 为什么 WCF 中需要 KnownTypeAttribute [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在学习WCF 不了解KnowTypeAttribute的真正优势 有人可以简单地解释一下为什么我们需要它吗 DataContrac
  • Automapper v5 忽略未映射的属性

    以前 当我使用 Automapper v3 x 时 只需添加一个即可忽略未映射的属性 IgnoreUnmappedProperties 扩展看起来像这样 public static class AutoMapperExtensions pu
  • 在运行时获取当前 .NET CLR 版本?

    如何在正在运行的 NET 程序中获取当前的 CLR 运行时版本 查看System Environment Version财产 https learn microsoft com en us dotnet api system environ
  • 如何在 iPhone 中的自定义按钮上设置活动指示器

    我是 iPhone 开发新手 我想设置一个加载在我的自定义按钮上的活动指示器 请指导我 示例 应用商店 gt 搜索 gt 显示更多 25 个 点击时 Add the UIActivityIndicatorView作为按钮的子视图 Creat
  • 每个进程 System.Web.HttpApplication 初始化多少次

    我有global asax它从我创建的自定义类扩展而来 称为MvcApplication它延伸自System Web HttpApplication 在它的构造函数中 它记录应用程序的启动 如下所示 protected MvcApplica
  • 如何将选项传递给 Rust 的 serde,以便可以在 Deserialize::deserialize() 中访问?

    对于上下文 我正在用 Rust 编写光线追踪器 但我正在努力寻找一种以与文件系统无关的方式加载场景的好方法 我在用着serde https serde rs 这样我就不必发明自己的文件格式 还 资源 图像纹理和网格数据 单独存储到场景文件中
  • SignalR 和 require.js 配置

    我正在合并SignalR进入我已经使用的项目需要 js处理我的脚本依赖项 我在确保 jquery signalR 1 1 2 加载后调用 signalr hubs 时遇到了一些麻烦 我已经让它工作了 但我想知道是否有更好的选择 这就是我所拥
  • 如何同步包含克隆元素的 jquery 可排序列表?

    我的情况很特殊 我有两个清单 1 列表包含所有项目 2 包含顶部列表 显然 项目重叠 并且第二个列表中的项目根据它们从列表 1 中克隆的元素标记为类clone 23clone 25 Example List 1 1 run 2 eat 3
  • WPF 图像缩放

    我有一个视图框 里面有一个图像 这非常棒 因为 Viewbox 会缩放图像以适合窗口 但是 我需要能够将图像缩放到完整尺寸并显示滚动条 但我很难弄清楚如何做到这一点 这就是我现在所拥有的 谁能指导我如何修改它以实现上述功能
  • R-lang / 如何使用 R 进行正则表达式 (Perl) 提取

    我使用 javascript 的正则表达式测试器得出以下 3 个正则表达式案例 从文本中提取不同类型的 URL 我想在 R 中使用这些正则表达式 regxi 来满足以下条件 http 网址 https www s 比特利网址 https b
  • 如何显示rails本地项目文件夹中的图像?

    非常基本的问题 但不知何故我无法让它发挥作用 我试图让位于项目本地文件夹中的图像显示在 Rails 上 另外 我正在使用引导程序 因此我需要声明class img responsive 以及 这是原始代码 img class img res
  • 如何将 read_html 的输出保存和读取为 RDS 文件?

    对象可以像这样保存和读取 Save as file saveRDS iris mydata RDS Read back in readRDS mydata RDS 但这似乎不适用于用xml2 read html Example librar
  • 一个JVM下的多个进程

    我们可以在一个 JVM 中运行多个进程吗 每个进程都应该有自己的内存配额吗 我的目标是在新的 http 请求进入时启动新进程 并为该进程分配单独的内存 以便每个用户请求都有自己的内存配额 如果内存配额已满 则不会打扰其他用户请求 我怎样才能
  • android: Parse.com Parseobject classnotfound 错误

    我在 Android 应用程序中使用 Parse com 的库 但收到以下错误 05 26 18 43 31 838 E AndroidRuntime 4759 致命异常 主要 05 26 18 43 31 838 E AndroidRun
  • 反应多个过滤器下拉菜单

    我有 React 应用程序 您可以在其中根据几个不同的属性过滤列表 目前 我可以一次过滤每个类别 但我想一次过滤多个类别 因此当您选择更多过滤器时 列表会变得越来越小 然后 当您清除所有值时 它将返回到原始列表 我怎样才能实现这个目标 de
  • 解析/转换 cookie 为 JSON 格式

    我们有任何 javascript 库或正则表达式来解析 将 cookie 转换为 JSON 格式吗 有些cookie是这样的 cookie referer example com post id 22 bcomID 8075 subretu
  • 替换非渲染(非显示)元素文本中的 ↵ (\n)

    我正在编写一个解析器 从隐藏的 iframe 中获取数据 在文本中我需要替换 n 个字符 空间 我用它来完成这项任务 text replace n gi 但是 它仅适用于可见元素 即没有display none 如果该元素不可见 displ