quill - 如何在 quilljs 中制作不可选择的嵌入自定义格式

标签 quill

我想创建一个自定义的嵌入格式,可以设置样式但它的文本不能更改。我的用例与主题标签的情况非常相似。我想要一个外部按钮,它将向编辑器上的当前选定范围添加一个主题标签。但是在这样做之后,我希望主题标签表现为“块”,以便用户无法去那里更改其文本。

我能做到这一点的唯一方法是说格式的节点是 contenteditable=false 但我不确定我是否正确,因为我在使用这种方法时遇到了一些问题,主要是:

如果主题标签是编辑器上的最后一个东西,我不能移动过去(使用箭头或光标)
双击它选择应该选择整个事物(而不是单个单词)(用于样式)
如果光标紧跟在话题标签的后面,按右写会写在话题标签内
您可以检查我在试验时制作的代码笔:

  Quill.import('blots/embed');
  class QuillHashtag extends Embed {
    static create(value) {
      let node = super.create(value);
      node.innerHTML = `<span contenteditable=false>#${value}</span>`;
      return node;
    }
  }
  QuillHashtag.blotName = 'hashtag'; 
  QuillHashtag.className = 'quill-hashtag';
  QuillHashtag.tagName = 'span';

这是完整的代码笔:
http://codepen.io/emanuelbsilva/pen/Zpmmzv

如果你们能给我任何关于如何实现这一点的提示,我会很高兴。

谢谢。

最佳答案

您需要做的就是设置 contenteditable 归因于 在主跨度上。目前,您正在嵌套跨度上执行此操作。

node.setAttribute('contenteditable', false);

我修改了hashtag code从您的帖子并应用更改。

var Embed = Quill.import('blots/embed');
class QuillHashtag extends Embed {
  static create(value) {
    let node = super.create(value);
    node.setAttribute('contenteditable', false);
    node.innerHTML = value;
    return node;
  }
}
QuillHashtag.blotName = 'hashtag';
QuillHashtag.className = 'quill-hashtag';
QuillHashtag.tagName = 'span';

Quill.register({
  'formats/hashtag': QuillHashtag
});

var quill = new Quill('#editor-container', {
  modules: {
    toolbar: [
      [{
        header: [1, 2, false]
      }],
      ['bold', 'italic', 'underline'],
      ['image', 'code-block']
    ]
  },
  placeholder: 'Compose an epic...',
  theme: 'snow' // or 'bubble'
});


document.getElementById('b').addEventListener('click', () => {
  var range = quill.getSelection();
  if (range) {
    var hashtag = prompt("Select hashtag", "foobar");
    quill.insertEmbed(range.index, 'hashtag', hashtag);
  }

});
#editor-container {
  height: 375px;
}

.quill-hashtag {
  background-color: lightgray;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/quill/1.3.1/quill.snow.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/quill/1.3.1/quill.min.js"></script>
<div id="editor-container"></div>
<button id="b">add hashtag</button>

关于quill - 如何在 quilljs 中制作不可选择的嵌入自定义格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40159839/

相关文章:

javascript - 多个动态创建的鹅毛笔编辑器可以使用同一个工具栏吗

reactjs - 如何在 Quill 编辑器中向内容添加不可编辑标签

reactjs - 如何在 react-quill 中使用 quill-better-table

javascript - 在 Quill 编辑器中嵌入自定义内联印迹后插入未定义的印迹

javascript - .click() 需要两次点击 - jquery + QuillJS

javascript - 无法将 obj 实例化到文件中并在另一个文件中使用它

javascript - 如何从 quils 获取数据发送到服务器?

angular - PrimeNG Quill 编辑器自定义工具栏

javascript - 跨多个编辑器共享 Quill 工具栏

javascript - 添加查看源代码按钮