Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从contenteditable div获取纯文本_Javascript_Jquery_Html_Contenteditable - Fatal编程技术网

Javascript 从contenteditable div获取纯文本

Javascript 从contenteditable div获取纯文本,javascript,jquery,html,contenteditable,Javascript,Jquery,Html,Contenteditable,是否可以从contenteditable div(包括换行符)中提取纯文本?jQuery$.text()方法去掉了我需要的换行符。该解决方案可以使用jQuery。稍加调整,正是我所需要的。没有简单的跨浏览器方式innerText在某些(但不是所有)浏览器中实现您想要的功能。将选择设置为包含可编辑元素,并调用toString()在不同的浏览器集合中执行所需操作。简而言之,没有简单的方法:您需要遍历DOM并根据需要为和块级元素添加换行符。我当然不建议使用任何基于regex的解决方案,比如您似乎已经决

是否可以从contenteditable div(包括换行符)中提取纯文本?jQuery$.text()方法去掉了我需要的换行符。该解决方案可以使用jQuery。

稍加调整,正是我所需要的。

没有简单的跨浏览器方式
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的
    选择
    范围
    支持。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!