如何解决检查用户在 CKEditor 4 contextMenu 中点击的元素
我在 CKEditor 4(在 Drupal 内部)中使用 contextMenu,我必须根据用户单击的元素显示不同的菜单项。我已经这样做了一段时间,但我有一个恼人的可用性问题:用户必须在右键单击之前左键单击,因为 contextMenu.addListener()
中可用的所有参数都引用 caret(文本插入点)而不是 cursor(鼠标位置)。给出一个想法,这是我正在做的事情的大纲:
editor.contextMenu.addListener(function(element,selection,path) {
for (let ancestor of path.lastElement.getParents(true)) {
if (ancestor.hasClass) {
if (ancestor.hasClass('myclass-1')) {
return {
...common_items,command_1: CKEDITOR.TRISTATE_OFF
} ;
}
else if (ancestor.hasClass('myclass-2')) {
return {
...common_items,command_2: CKEDITOR.TRISTATE_OFF,command_3: CKEDITOR.TRISTATE_OFF
} ;
}
...
(我无耻地使用了 if 链而不是对象,但这现在就足够了,因为我只有几个类要检查)。
使用 path.lastElement
或 element
是一样的:它们都指向同一个元素。我没有尝试 selection
,但它显然是一回事:它们只是描述插入点位置以及是否选择文本的三种不同方式。
我可以将插入符号移动到光标位置,从可用性的角度来看这也很好,但是我找不到在 CKEditor 中找到光标位置的方法,我找到的所有信息都是指插入符号(并且大部分内容可以互换使用这两个术语,这表明该术语可能并不像我希望的那样通用——但这已经超出了重点)。即使我找到了找到位置的方法,我也不知道在调用 contextMenu 侦听器之前是否会更改选择。
我很惊讶我没有发现关于这一点的任何问题:没有人遇到过类似的问题吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。