CKEDITOR - 如何添加永久 onclick 事件?

2024-06-18

我正在寻找一种使 CKEDITOR wysiwyg 内容具有交互性的方法。这意味着例如向特定元素添加一些 onclick 事件。我可以做这样的事情:

CKEDITOR.instances['editor1'].document.getById('someid').setAttribute('onclick','alert("blabla")');

处理完这个动作后效果很好。但因此,如果我将模式更改为源模式,然后返回所见即所得模式,则 javascript 将无法运行。 onclick 操作在源模式中仍然可见,但不会在 textarea 元素内呈现。

然而,有趣的是,这每次都运行良好:

CKEDITOR.instances['editor1'].document.getById('id1').setAttribute('style','cursor: pointer;');

而且它也没有渲染在 textarea 元素内!这怎么可能?使用 CKEDITOR 内容元素的 onclick 和 onmouse 事件的最佳方式是什么?

我尝试通过源模式手动编写:

    <html>
    <head>
        <title></title>
    </head>
    <body>
        <p>
            This is some <strong id="id1" onclick="alert('blabla');" style="cursor: pointer;">sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p>
    </body>
</html>

并且 Javascript(onclick 操作)不起作用。有任何想法吗?

多谢!

我的最终解决方案:

               editor.on('contentDom', function() {
                var elements = editor.document.getElementsByTag('span');
                for (var i = 0, c = elements.count(); i < c; i++) {
                    var e = new CKEDITOR.dom.element(elements.$.item(i));
                    if (hasSemanticAttribute(e)) {
                        // leve tlacitko mysi - obsluha
                        e.on('click', function() {
                            if (this.getAttribute('class') === marked) {
                                if (editor.document.$.getElementsByClassName(marked_unique).length > 0) {
                                    this.removeAttribute('class');
                                } else {
                                    this.setAttribute('class', marked_unique);
                                }
                            } else if (this.getAttribute('class') === marked_unique) {
                                this.removeAttribute('class');
                            } else {
                                this.setAttribute('class', marked);
                            }
                        });
                    }
                }
            });

过滤(仅限 CKEditor >=4.1)

该属性已被删除,因为 CKEditor 不允许。该过滤系统称为高级内容过滤器,您可以在此处阅读:

  • http://ckeditor.com/blog/Upgrading-to-CKEditor-4.1 http://ckeditor.com/blog/Upgrading-to-CKEditor-4.1
  • http://ckeditor.com/blog/CKEditor-4.1-发布 http://ckeditor.com/blog/CKEditor-4.1-Released
  • 高级内容过滤器指南 http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter

简而言之 - 您需要配置编辑器以允许onclick某些元素的属性。例如:

CKEDITOR.replace( 'editor1', {
    extraAllowedContent: 'strong[onclick]'
} );

在这里阅读更多内容:config.extraAllowedContent http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-extraAllowedContent.

on*CKEditor 中的属性

CKEditor 编码on*加载内容时使用属性,这样它们就不会破坏编辑功能。例如,onmouseout变成data-cke-pa-onmouseout在编辑器内部,然后,当从编辑器获取数据时,该属性被解码。

没有为此的配置选项,因为它没有意义。

Note:当您在编辑器的可编辑元素内设置元素属性时,您应该将其设置为受保护的格式:

element.setAttribute( 'data-cke-pa-onclick', 'alert("blabla")' );

CKEditor 中的可点击元素

如果您想在编辑器中观察点击事件,那么这是正确的解决方案:

editor.on( 'contentDom', function() {
    var element = editor.document.getById( 'foo' );
    editor.editable().attachListener( element, 'click', function( evt ) {
        // ...

        // Get the event target (needed for events delegation).
        evt.data.getTarget();
    } );
} );

检查文档editor#contentDom event http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDom这在这种情况下非常重要。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CKEDITOR - 如何添加永久 onclick 事件? 的相关文章

随机推荐

  • 如何检测在 MapView 中选择了哪个注释

    我在地图内做了一些注释 当我点击它们时 我会看到一些信息 并且有一个打开地图的按钮 并且使用我无法接受的正确信息应该可以绘制出我的路线 这是我的代码 我有 2 个双精度数组用于我的经纬度 我从查询中填充了它们 var lat Double
  • Laravel 5 使用语句[重复]

    这个问题在这里已经有答案了 第一次使用 Laravel 5 我了解命名空间的使用以及为什么需要使用它们 我不明白的是为什么我需要添加如下所示的 use 语句 在控制器的顶部 use Session use Input use Respons
  • 如何使用 Maven 的 Java API 访问 Maven Artifact POM?

    我正在尝试检索整个依赖关系树及其从项目根部开始的 pom 我从文件系统中已经存在的 POM 开始 但我不确定如何从存储库中检索依赖项 pom 我正在使用以下代码来访问依赖项列表 从列表中我获得了有关文物的所有信息 我只是不确定如何访问存储库
  • C 代码中的错误处理

    当涉及到在 C 库中以一致的方式处理错误时 您认为 最佳实践 是什么 我一直在想有两种方法 始终返回错误代码 典型的函数如下所示 MYAPI ERROR getObjectSize MYAPIHandle h int returnedSiz
  • DCI - 数据、上下文和交互 - MVC 的继承者?

    最好的描述是什么数据 上下文和交互 DCI http www gertrudandcope com a googlepages com thedciarchitecture将其推销给组织 它的创建者是特里格夫 雷恩斯考格 http folk
  • 重新计算绝对定位元素位置?

    我有一些元素相对于文档正文是绝对定位的 当在 DOM 内部某处添加某些内容时 绝对定位的元素也应该重新定位 问题是 如何知道 DOM 内部某处发生了更改 第二个想法是监听文档高度和宽度的变化 我认为这是最有效的方法 还有其他方法可以实现这一
  • 带条件的 Numpy 均值

    我有纯Python计算平均速度的算法 speed avg speed 0 0 speed count 0 for i in speed if i gt 0 I dont need zeros avg speed i speed count
  • 如何将html id添加到rails中的form_for标签中?

    我正在尝试将 id 标签添加到我在 Rails 中创建的表单中 表单的开头有以下代码 我是否可以向 form for 嵌入式 ruby 添加一个 id 或者我是否必须创建一个 form tag 字段并在那里添加 id 如果我必须创建 for
  • Fluent Nhibernate 映射的单元测试

    我正在尝试了解社区的其他成员如何测试他们的 Fluent Nhibernate 映射 假设我有以下映射 public UserHeaderMap Table USER HEADER Id x gt x Id USER ID Map x gt
  • 在 Mac OS Sierra 上使用 brew 安装节点失败

    我正在尝试在 macOS Sierra 上使用自制程序安装节点 我跑 brew install node 看似成功安装后 我在尝试运行时得到以下信息node dyld Library not loaded usr local opt icu
  • Linux 上的静态 Qt5 构建:部署时如何处理字体?

    我使用这些配置选项创建了 Qt 5 2 0 库的静态版本 Ubuntu 12 04 开源 确认许可 force pkg config 发布 静止的 前缀 home juzzlin qt5 无icu opengl桌面 无油嘴滑舌 辅助功能 n
  • 如何使用系统凭据自动登录网站?

    我需要为 Intranet 用户开发一个 Web 应用程序 我不希望他们每次访问该网站时都输入登录凭据 它应该从系统用户名和密码自动加载 即 如果他们拥有有效的系统用户名和密码 他们应该能够登录应用程序 我正在使用Java 如何满足这个要求
  • 如何水平居中条形图注释

    我正在创建一个像这样的条形图 gender M F numbers males females bars plt bar gender numbers width 0 1 bottom None align center data None
  • 在 Docker 中保护私有 PyPi 的凭据

    我正在构建 Docker 映像 需要运行 pip install 与带有凭据的私有 PyPi 保护凭证的最佳方法是什么 即使我删除它们 使用各种文件配置选项 pip conf requirements txt netrc 仍然是一个漏洞 因
  • Camera2basic 应用程序,在 Android 6.0 LGG3 中具有非常暗的预览

    新的 API 也许只在 LG G3 上 似乎发生了一些变化 我在用着示例代码 https github com googlesamples android Camera2Basic 在我的 Nexus 4 上 代码运行完美 但在更新到 An
  • 从按日期时间排序的 MySQL 表中获取用户的最后一个条目

    我有一张看起来像这样的桌子 USERNAME DATA DATETIME Jhon text1 2010 06 01 16 29 43 Mike text2 2010 06 01 16 29 22 Silver text3 2010 05
  • 即使使用 MathContext 也会出现非终止小数错误

    我正在编写代码来实现这个算法 但是 即使使用 MathContext 1000 我也会收到此错误 Exception in thread main java lang ArithmeticException Non terminating
  • 有没有办法更改 JDialog 的所有者?

    我有一个非常具体的问题 我想知道是否有办法更改 JDialog 的所有者 可以使用构造函数设置 我想不存在 官方 的可能性 除了黑客攻击 但我想确保我没有错过任何东西 关于该主题的任何想法或提示都会有所帮助 谢谢 如果您的问题是如何在应用程
  • 仅当设备打开并且小部件在主屏幕上可见时更新小部件

    据我了解有关 Widgets 的官方文档 我有点困惑 标准 方法是定义一个BroadcastReceiver并以毫秒为单位定义更新频率 这种方式允许最小更新间隔为 30 分钟以节省电池电量 听起来很有道理 我发现阅读 Google 文档的
  • CKEDITOR - 如何添加永久 onclick 事件?

    我正在寻找一种使 CKEDITOR wysiwyg 内容具有交互性的方法 这意味着例如向特定元素添加一些 onclick 事件 我可以做这样的事情 CKEDITOR instances editor1 document getById so