Javascript 从contenteditable div获取纯文本
是否可以从contenteditable div(包括换行符)中提取纯文本?jQuery$.text()方法去掉了我需要的换行符。该解决方案可以使用jQuery。稍加调整,正是我所需要的。没有简单的跨浏览器方式Javascript 从contenteditable div获取纯文本,javascript,jquery,html,contenteditable,Javascript,Jquery,Html,Contenteditable,是否可以从contenteditable div(包括换行符)中提取纯文本?jQuery$.text()方法去掉了我需要的换行符。该解决方案可以使用jQuery。稍加调整,正是我所需要的。没有简单的跨浏览器方式innerText在某些(但不是所有)浏览器中实现您想要的功能。将选择设置为包含可编辑元素,并调用toString()在不同的浏览器集合中执行所需操作。简而言之,没有简单的方法:您需要遍历DOM并根据需要为和块级元素添加换行符。我当然不建议使用任何基于regex的解决方案,比如您似乎已经决
innerText
在某些(但不是所有)浏览器中实现您想要的功能。将选择设置为包含可编辑元素,并调用toString()
在不同的浏览器集合中执行所需操作。简而言之,没有简单的方法:您需要遍历DOM并根据需要为
和块级元素添加换行符。我当然不建议使用任何基于regex的解决方案,比如您似乎已经决定使用的解决方案,因为它永远不可能适用于所有可能的HTML
自我提升:我将在不久的将来将其添加到我的库中。无需使用额外的插件或编写自己的实现,您可以同时使用innerText和textContent属性(它们彼此等效)。除IE6-8支持innerText外,所有主要浏览器都支持textContent
var text = x.innerText || x.textContent
编辑:正如AgentME指出的,这不会在Firefox中保留用户的空白。要使用contenteditable实现这一点,您必须在Firefox上对innerText进行多边形填充。我可以想出几个选择:
x.innerHTML
开始,去掉额外的标记空白/标记,并将用户的空白从
和
转换为\n
和空格李>
选择
和范围
支持。Firefox支持Selection.toString
,其行为类似于innerText
,但它只适用于当前选定的文本。因此,您可以做的是记录用户的当前选择,将选择更改为contenteditable div的内容,调用selection.toString
,然后恢复用户的初始选择李>
在这两个选项中,我个人认为第二个选项在大多数情况下会更好;使用第一个选项,您要么得到一个快速而肮脏的正则表达式解决方案,要么使用CSS布局逻辑实现一个完整的HTML解析器。选项2的缺点是速度相对较慢,因此如果在更改时触发它,可能会遇到问题。选项2的演示是
更多信息:
或搜索提及预格式化文本的答案可以帮助您找到解决方案,我不会感到惊讶。您是否尝试过返回格式化文本的jquery$.html()?@Mak。我不想要任何html标签,但我想要换行符(不在$.html中),这已经添加到Rangy了吗?我看不到,但如果它在那里,我会很高兴的。@Bridgeman:还没有,但在推迟了几个月之后,我现在正在积极地研究它,并打算在下个月左右发布一些东西。innerText
和textContent
并不完全相同。我想这是我不必支持旧版本IE的又一个理由!尽管如此,即使是那些这样做的人,我也不认为再添加一个库来完成这么简单的事情是理想的。对于任何非平凡的项目来说,这都是通往维修地狱的道路。如果我在OP的鞋子里,我可能会退后一步考虑这个问题能否以另一种方式解决。OP的问题可能是由一个风格良好的文本区或一些服务器端处理解决的。这是OP问题的真正答案。它不使用插件,而是使用本机HTML函数/解决方案解决问题。textContent不包括换行符。OP特别要求一个能保持新线的答案。你是对的,我第一次错过了这个答案。谢谢。老实说,它不值得投票,因为“解决方案”是一个插件。虽然问题得到了令人满意的解决,但这并不是问题的真正答案,这是关于如何使用浏览器本机可用的HTML/Javascript从内容编辑的HTML元素中获取纯文本。OP没有要求提供插件,老实说,“使用插件”并不能帮助任何人学到任何东西。真正的答案是下面这个。我不同意“使用这个库,它完全满足你的需要”是一个错误的答案,但我会同意,这是一个错误的答案,现在的链接是404!