背景
大多数与从HTML中提取文本(即去除标签)有关的 问题 采用以下方法:
jQuery( htmlString ).text();
虽然这种方法摆脱了浏览器不一致性(例如 innerText
与 textContent
),但该函数调用也忽略了块级元素(例如 li
)的语义意义。
问题
在各种浏览器中保留块级元素(即语义意图)的换行符需要付出很大的努力,正如 Mike Wilcox 描述 的那样。
一个看似更简单的解决方案是模拟将 HTML 内容粘贴到 <textarea>
中,这样可以剥离 HTML 并保留块级元素的换行符。然而,基于 JavaScript 的插入不会触发用户将内容粘贴到 <textarea>
时浏览器使用的相同 HTML-to-text 程序。
我还尝试集成 Mike Wilcox 的 JavaScript 代码。该代码在 Chromium 中有效,但在 Firefox 中无效。
问题
什么是使用jQuery(或vanilla JavaScript)从HTML中提取文本的最简单的跨浏览器方法,同时保留块级元素的语义换行符?
示例
考虑以下内容:
- 选择并复制整个问题。
- 打开textarea示例页面。
- 将内容粘贴到文本区域中。
文本区域会保留有序列表、标题、预格式化文本等的换行符。这就是我想要实现的结果。
进一步说明,对于任何HTML内容,例如:
<h1>Header</h1>
<p>Paragraph</p>
<ul>
<li>First</li>
<li>Second</li>
</ul>
<dl>
<dt>Term</dt>
<dd>Definition</dd>
</dl>
<div>Div with <span>span</span>.<br />After the <a href="...">break</a>.</div>
我该如何创建以下内容:
标题 段落
第一项 第二项
术语 定义
带有 span 的 div。 分隔符后。
注:缩进和非规范化空格均不相关。