0

我正在尝试将 DOM 节点及其所有子节点转换为我设计的纯文本标记。我可以node.childNodes用来获取所有内容的列表并递归地将其转换为我的字符串格式。

但是,当我从 中取出文本时TextNode,它会包含页面上不可见的换行符和空格。对于纯文本,我希望获得与 HTML 相同的外观 - 因此文本之前不应该有很多缩进或之后的换行符,即使它们在 HTML 标记中,因为我的浏览器在它时将它们剥离了呈现 HTML。

显而易见的答案是.trim()我自己的字符串 - 除了这可以去掉文本中应该存在的空格,例如<em>text.</em> moretext. 后一个文本节点丢失了它之前的空间。

即使这样有效,它在哲学上也没有吸引力。我希望这个算法基于呈现给用户的文本。该网页在底层标记中隐藏了诸如空格、制表符和换行符之类的实现细节,我希望使用它用来修剪它们的任何东西,而不是trim(). 理想情况下,会有一个等效的node.textContent列表,其中包含纯文本和子元素的列表。

我还没有找到任何关于这个的东西,我也看不到一个好的方法来编码它以聪明地处理这些空间(缺少比较.textContent.nodeValue字符串或解析innerHTML自己或其他东西)。帮助?

4

2 回答 2

0
document.getElementById("someid").innerText.replace(/\s+/g," ")

trim方法删除字符串头部和尾部的空格,但不删除中间的空格

于 2013-02-19T03:23:55.383 回答
0

作为我Rangy库的TextRange 模块的一部分,我已经编写了一个实现,但是为此包含很多代码。

var displayedText = rangy.innerText(node);
于 2013-02-19T10:55:45.470 回答