将自定义html插入到羽毛笔编辑器中

时间:2019-03-14 11:57:02

标签: angular editor contenteditable quill

我将Quill用于发送邮件表单,并且在我的工具栏中有一个带有签名的下拉列表。 选择签名时,我必须在编辑器中插入自定义且复杂的html代码(格式化并带有img),更改签名时,我必须替换插入的html代码。

我将代码插入指定了ID的p标签中,但是Quill清除了代码,同时删除了id,因此我找不到p标签。

我需要保留html代码和ID。

有人可以帮助我吗? 拜托。

1 个答案:

答案 0 :(得分:1)

您必须编写一个自定义Blot,如下所示:

class Signature extends BlockEmbed {
  static create(value) {
    const node = super.create(value);
    node.contentEditable = 'false';
    this._addSignature(node, value);
    return node;
  }

  static value(node) {
    return node.getAttribute(Signature.blotName)
  }

  static _addSignature(node, value) {
    node.setAttribute(Signature.blotName, value);

    // This is a simple switch, but you can use
    // whatever method of building HTML you need.
    // Could even be async.
    switch (value) {
      case 1:
        return this._addSignature1(node);
      default:
        throw new Error(`Unknown signature type ${ value }`);
    }
  }

  static _addSignature1(node) {
    const div = document.createElement('DIV');
    div.textContent = 'Signature with image';
    const img = document.createElement('IMG');
    img.src = 'https://example.com/image.jpg';

    node.appendChild(div);
    node.appendChild(img);
  }
}
Signature.blotName = 'signature';
Signature.tagName = 'DIV';
Signature.className = 'ql-signature';

确保您register

Quill.register(Signature);

然后您可以像这样使用它:

quill.updateContents([
  { insert: { signature: 1 } },
]);