从contenteditable div获取纯文本

时间:2011-07-29 02:52:51

标签: javascript jquery html contenteditable

是否可以从可疑的div中提取明文,包括换行符? jQuery $ .text()方法删除了我需要的换行符。该解决方案可以使用jQuery。

3 个答案:

答案 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。我可以提出几种选择:

  1. x.innerHTML开始,删除额外的标记空格/标记,并将用户的空格从<br>&nbsp;转换为\n和空格。
  2. 使用Firefox的SelectionRange支持。 Firefox支持Selection.toString,其行为与innerText类似,但它仅适用于当前选定的文本。因此,您可以做的是记录用户的当前选择,将选择更改为您的contenteditable div的内容,调用Selection.toString,然后恢复用户的初始选择。
  3. 在我个人认为的第二种选择中,大多数情况下会更好;使用第一个选项,您将获得一个快速而肮脏的正则表达式解决方案,或者您可以使用CSS布局逻辑来实现完整的HTML解析器。选项2的缺点是它相对较慢,因此如果触发onchange或类似的东西,可能会遇到问题。选项2的演示是here

    更多信息:

答案 2 :(得分:0)

没有简单的跨浏览器方式。 innerText在某些(但不是全部)浏览器中执行您想要的操作。将选择设置为包含可编辑元素并调用toString()可以在不同的浏览器集合中执行您想要的操作。简而言之,没有简单的方法:您需要遍历DOM并根据<br>和块级元素添加换行符。我当然不建议使用任何基于正则表达式的解决方案,例如您似乎已经确定的解决方案,因为它永远不会适用于所有可能的HTML。

自我宣传:我将在不久的将来将其添加到我的Rangy图书馆。