使用了ckeditor5富文本编辑器,但添加link、autolink插件功能后,添加链接会生成一个a标签,ctrl/command+鼠标点击后才会跳转新的页面。
现在我的需求是不想让它跳转,在触发跳转事件时获取到a标签的href再拼接一层做一些逻辑处理
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="editor">This is some sample content.</div>
<script src="https://cdn.ckeditor.com/ckeditor5/36.0.1/classic/ckeditor.js"></script>
<script>
ClassicEditor.create(document.getElementById('editor'), {
licenseKey: '',
// plugins:[Link,AutoLink],
toolbar: {
items: [
'heading',
'link',
'bold',
'italic',
'underline',
'fontColor',
'fontBackgroundColor',
'blockQuote',
'imageUpload',
'undo',
'redo'
]
},
link: {
decorators: [
{
mode: 'manual',
label: 'Downloadable',
attributes: {
download: 'download'
}
}
]
},
})
.then(editor => {
editor.model.document.on('change:data', (e) => {
const doms = document.querySelector('#contian').querySelectorAll('a')
console.log(doms);
doms.forEach(dom => {
// dom.setAttribute("onclick",'')
// const href = dom.href
dom.href = 'javascript:void(0)'
// dom.href = 'dingtalk://dingtalkclient/page/link?url=' + encodeURIComponent(href)
// // dom.setAttribute('data-href', href)
})
})
})
.catch(error => {
console.error('ckEditor error');
reject(error);
});
</script>
</body>
</html>
我遇到的难点:
- ctrl/command+鼠标点击事件监听不到,给
a
标签绑定onclick事件阻止跳转失效,它会被重置 - 获取a标签后,重新给href赋值,但只要在编辑器内有操作,它的href就会被重置成原来的
请求有什么方法可以达到在富文本编辑器内不让a标签默认跳转,而是ctrl/command+鼠标点击事件时获取a的href,再自己包一层跳转逻辑?
可以使用事件捕获和阻止默认事件实现