是否可以从可疑的div中提取明文,包括换行符? jQuery $ .text()方法删除了我需要的换行符。该解决方案可以使用jQuery。
答案 0 :(得分:7)
经过一些调整,https://github.com/vorushin/jsHtmlToText正是我所需要的。
答案 1 :(得分:5)
不使用额外的插件或编写自己的实现,您可以使用innerText和textContent属性(它们彼此相同)。除了支持innerText的IE 6-8之外,所有主流浏览器都支持textContent。
var text = x.innerText || x.textContent
http://www.quirksmode.org/dom/w3c_html.html#t07
编辑:正如AgentME指出的那样,这不会保留Firefox中用户的空白。要想做到这一点,你必须在Firefox上填充innerText。我可以提出几种选择:x.innerHTML
开始,删除额外的标记空格/标记,并将用户的空格从<br>
和
转换为\n
和空格。 Selection
和Range
支持。 Firefox支持Selection.toString
,其行为与innerText
类似,但它仅适用于当前选定的文本。因此,您可以做的是记录用户的当前选择,将选择更改为您的contenteditable div的内容,调用Selection.toString
,然后恢复用户的初始选择。 在我个人认为的第二种选择中,大多数情况下会更好;使用第一个选项,您将获得一个快速而肮脏的正则表达式解决方案,或者您可以使用CSS布局逻辑来实现完整的HTML解析器。选项2的缺点是它相对较慢,因此如果触发onchange
或类似的东西,可能会遇到问题。选项2的演示是here。
更多信息:
答案 2 :(得分:0)
没有简单的跨浏览器方式。 innerText
在某些(但不是全部)浏览器中执行您想要的操作。将选择设置为包含可编辑元素并调用toString()
可以在不同的浏览器集合中执行您想要的操作。简而言之,没有简单的方法:您需要遍历DOM并根据<br>
和块级元素添加换行符。我当然不建议使用任何基于正则表达式的解决方案,例如您似乎已经确定的解决方案,因为它永远不会适用于所有可能的HTML。
自我宣传:我将在不久的将来将其添加到我的Rangy图书馆。