繁体   English   中英

如何从HTML TextNode而不是HTML标记获取实际显示的文本?

[英]How can I get the actual displayed text from an HTML TextNode instead of the HTML markup?

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

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

显而易见的答案是自己对字符串.trim()进行.trim() -除非在<em>text.</em> moretext类的情况下,它可以删除文本中应该存在的空格。 后者的textnode失去了前面的空间。

即使这行得通,但从哲学上讲也没有吸引力。 我希望该算法基于呈现给用户的文本。 该网页在底层标记中隐藏了诸如空格,制表符和换行符之类的实现细节,我希望使用任何用于修剪它们的东西(而不是trim()授予的近似值trim()来保留该抽象。 理想情况下,将有一个等效的node.textContent ,它以某种方式同时包含纯文本和子元素的列表。

我还没有找到任何关于此的信息,也看不出有什么好方法可以对其进行编码以使其对这些空间变得精明(缺少比较.textContent.nodeValue字符串或自己解析innerHTML或其他内容的方法)。 救命?

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

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

我已经在我的Rangy库的TextRange模块中编写了与此完全相同的实现,但是为此要包括很多代码。

var displayedText = rangy.innerText(node);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM