如何在基于 Quill 的编辑器中粘贴纯文本

How to paste plain text in a Quill-based editor

Quill (https://quilljs.com/) 使在网页中嵌入高质量的文本编辑器变得简单。在编辑器中粘贴html内容时,会过滤粘贴的html内容,然后放入文本编辑器中。我的问题是:如何配置 Quill 使其仅在文本编辑器中粘贴纯文本?它会过滤掉所有标签,只留下纯文本。

有关剪贴板模块的文档 (http://quilljs.com/docs/modules/clipboard/) 说可以将自定义匹配器添加到剪贴板,这将过滤粘贴的文本。

我不知道如何编写只允许纯文本的匹配器。非常感谢任何帮助和示例 - 谢谢!

经过反复试验,我找到了答案。以下匹配器将使编辑器仅粘贴纯文本:

quill.clipboard.addMatcher (Node.ELEMENT_NODE, function (node, delta) {
    var plaintext = $ (node).text ();
    return new Delta().insert (plaintext);
});

它使用jQuery。 :)

无法得到工作的答案。这是另一种修补剪贴板模块以仅接受纯文本的方法。

GitHub要点:

https://gist.github.com/prodrammer/d4d205594b2993224b8ad111cebe1a13

剪贴板实现:

import Quill from 'quill'
const Clipboard = Quill.import('modules/clipboard')
const Delta = Quill.import('delta')

class PlainClipboard extends Clipboard {
  onPaste (e) {
    e.preventDefault()
    const range = this.quill.getSelection()
    const text = e.clipboardData.getData('text/plain')
    const delta = new Delta()
    .retain(range.index)
    .delete(range.length)
    .insert(text)
    const index = text.length + range.index
    const length = 0
    this.quill.updateContents(delta, 'silent')
    this.quill.setSelection(index, length, 'silent')
    this.quill.scrollIntoView()
  }
}

export default PlainClipboard

用法示例:

import Quill from 'quill'
import PlainClipboard from './PlainClipboard'

Quill.register('modules/clipboard', PlainClipboard, true)

更新了 的解决方案 - 在没有 jQuery 的情况下也能工作,还解决了缺少 Delta 对象的问题。

quill.clipboard.addMatcher (Node.ELEMENT_NODE, function (node, delta) {
    var plaintext = node.innerText
    var Delta = Quill.import('delta')
    return new Delta().insert(plaintext)
})

对于 google 员工;

我创建了一个 Quill 插件,它删除了所有不受支持的标签和属性。除非另有配置,否则它会通过查看工具栏模块来检测。

我以为我post就在这里,这样其他人就不用费力了:)

https://www.npmjs.com/package/quill-paste-smart