如何向 Quill.js 添加新格式(<hr> 标签)?
How can I add a new format (<hr> tag) to Quill.js?
我想添加一个按钮,用于向 quill.js (beta) 编辑器添加 <hr>
标签。
这里是fiddle.
<!-- Initialize Quill editor -->
<div id="toolbar-container">
<span class="ql-formats">
<button class="ql-hr"></button> //here my hr-button
</span>
<span class="ql-formats">
<button class="ql-bold"></button>
<button class="ql-italic"></button>
</span>
</div>
<div id="editor">
<p>Hello World!</p>
<hr> // this gets replaced by <p> tag automatically *strange*
<p>Some initial <strong>bold</strong> text</p>
</div>
我初始化我的编辑器:
var quill = new Quill('#editor', {
modules: {
toolbar: '#toolbar-container'
},
placeholder: 'Compose an epic...',
theme: 'snow'
});
在这里,我向我的编辑器添加了一个 <h1>
标签功能,并且效果很好:
$('.ql-hr').on("click",function(){
var range = quill.getSelection();
var text = quill.getText(range.index, range.length);
quill.deleteText(range.index, range.length);
quill.pasteHTML(range.index, '<h1>'+text+'</h1>');
})
现在我对 <hr>
标签进行同样的尝试,但根本不起作用:
$('.ql-hr').on("click",function(){
var range = quill.getSelection();
quill.pasteHTML(range.index, '<hr>');
})
初始 div#editor
中的 <hr>
标记被替换为 <p>
标记。我添加的按钮功能不适用于 <hr>
标签,但适用于其他标签。我知道 <hr>
标签没有实现到 Quill.js,这也是我得到这个控制台输出的原因:
quill:toolbar ignoring attaching to nonexistent format hr select.ql-hr
有什么办法可以解决这个问题吗?
我仍然不知道为什么这个问题有否决票,但是这里是解决方案:
导入嵌入 blot - 重要:不是 "block",不是 "embed","block/embed"!
var Embed = Quill.import('blots/block/embed');
定义一个新的 class 来扩展那个 Embed
class Hr extends Embed {
static create(value) {
let node = super.create(value);
// give it some margin
node.setAttribute('style', "height:0px; margin-top:10px; margin-bottom:10px;");
return node;
}
}
定义您的标签
Hr.blotName = 'hr'; //now you can use .ql-hr classname in your toolbar
Hr.className = 'my-hr';
Hr.tagName = 'hr';
为
按钮编写自定义处理程序
var customHrHandler = function(){
// get the position of the cursor
var range = quill.getSelection();
if (range) {
// insert the <hr> where the cursor is
quill.insertEmbed(range.index,"hr","null")
}
}
注册您的新格式
Quill.register({
'formats/hr': Hr
});
在 HTML
中使用正确的选择器实例化您的编辑器
var quill = new Quill('#editor', {
modules: {
toolbar: { container: '#toolbar-container',
handlers: {
'hr': customHrHandler
}
}
},
theme: 'snow'
});
HTML部分保持不变。整个
功能可以类似于 <img> format. 来完成
谢谢你,你很有帮助的社区。
Not enough rep to comment, so posting as an answer, to address a minor
issue.
默认提示框由 has to be seemingly handled in a toolbar handler中所示的嵌入引起的(带第二个参数),如:
var toolbarOptions = {
handlers: {
// ...
'hr': function(value) {
this.quill.format('hr', true);
}
}
}
来源讨论 -
Documentation: How to avoid default 'prompt' when invoking custom Embed blots via toolbar module
工具栏处理程序文档中的提示示例:https://quilljs.com/docs/modules/toolbar/#handlers
我想添加一个按钮,用于向 quill.js (beta) 编辑器添加 <hr>
标签。
这里是fiddle.
<!-- Initialize Quill editor -->
<div id="toolbar-container">
<span class="ql-formats">
<button class="ql-hr"></button> //here my hr-button
</span>
<span class="ql-formats">
<button class="ql-bold"></button>
<button class="ql-italic"></button>
</span>
</div>
<div id="editor">
<p>Hello World!</p>
<hr> // this gets replaced by <p> tag automatically *strange*
<p>Some initial <strong>bold</strong> text</p>
</div>
我初始化我的编辑器:
var quill = new Quill('#editor', {
modules: {
toolbar: '#toolbar-container'
},
placeholder: 'Compose an epic...',
theme: 'snow'
});
在这里,我向我的编辑器添加了一个 <h1>
标签功能,并且效果很好:
$('.ql-hr').on("click",function(){
var range = quill.getSelection();
var text = quill.getText(range.index, range.length);
quill.deleteText(range.index, range.length);
quill.pasteHTML(range.index, '<h1>'+text+'</h1>');
})
现在我对 <hr>
标签进行同样的尝试,但根本不起作用:
$('.ql-hr').on("click",function(){
var range = quill.getSelection();
quill.pasteHTML(range.index, '<hr>');
})
初始 div#editor
中的 <hr>
标记被替换为 <p>
标记。我添加的按钮功能不适用于 <hr>
标签,但适用于其他标签。我知道 <hr>
标签没有实现到 Quill.js,这也是我得到这个控制台输出的原因:
quill:toolbar ignoring attaching to nonexistent format hr select.ql-hr
有什么办法可以解决这个问题吗?
我仍然不知道为什么这个问题有否决票,但是这里是解决方案:
导入嵌入 blot - 重要:不是 "block",不是 "embed","block/embed"!
var Embed = Quill.import('blots/block/embed');
定义一个新的 class 来扩展那个 Embed
class Hr extends Embed {
static create(value) {
let node = super.create(value);
// give it some margin
node.setAttribute('style', "height:0px; margin-top:10px; margin-bottom:10px;");
return node;
}
}
定义您的标签
Hr.blotName = 'hr'; //now you can use .ql-hr classname in your toolbar
Hr.className = 'my-hr';
Hr.tagName = 'hr';
为
按钮编写自定义处理程序
var customHrHandler = function(){
// get the position of the cursor
var range = quill.getSelection();
if (range) {
// insert the <hr> where the cursor is
quill.insertEmbed(range.index,"hr","null")
}
}
注册您的新格式
Quill.register({
'formats/hr': Hr
});
在 HTML
中使用正确的选择器实例化您的编辑器var quill = new Quill('#editor', {
modules: {
toolbar: { container: '#toolbar-container',
handlers: {
'hr': customHrHandler
}
}
},
theme: 'snow'
});
HTML部分保持不变。整个
功能可以类似于 <img> format. 来完成
谢谢你,你很有帮助的社区。
Not enough rep to comment, so posting as an answer, to address a minor issue.
默认提示框由
var toolbarOptions = {
handlers: {
// ...
'hr': function(value) {
this.quill.format('hr', true);
}
}
}
来源讨论 -
Documentation: How to avoid default 'prompt' when invoking custom Embed blots via toolbar module
工具栏处理程序文档中的提示示例:https://quilljs.com/docs/modules/toolbar/#handlers