You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过onclick点击事件在div中追加加载功能完整的CKEditor富文本编辑器

问题根因
  • 页面初始加载时你已经调用了CKEDITOR.replace( 'editor2' ),但此时id/name为editor2的textarea还没有被插入到DOM中,初始化命令直接失效
  • 点击按钮插入textarea后,没有再次调用CKEditor的初始化方法,所以只会渲染普通文本框
  • 没有给动态生成的textarea设置唯一标识,多次点击添加按钮会出现name重复的冲突
  • codeEditorCount变量没有设置初始值,计数逻辑失效
修复后的完整代码
<!DOCTYPE html>
<html>
  <head>
      <meta charset="utf-8">
      <title>CKEditor</title>
      <script src="https://cdn.ckeditor.com/4.16.2/standard/ckeditor.js"></script>
  </head>
  <body>
   <h3>Document Load (Working)</h3>
   <textarea name="editor1"></textarea>
   <script>
           CKEDITOR.replace( 'editor1' );
   </script>            
   <h3>When Append (Fixed)</h3>
   <button onclick="addCodeEditor('Editor')" class="btn btn-primary">Editor</button>   
   <div id="additionalElement"></div>
 </body>
 <script>
 var codeEditorCount = 1; // 初始化编辑器计数
 function addCodeEditor(Editor){
    var div = document.getElementById('additionalElement');
    let editorName = `dynamic_editor_${codeEditorCount}`; // 生成唯一编辑器标识
    div.innerHTML += `<textarea name="${editorName}"></textarea>`;
    // 文本框插入DOM后立刻初始化CKEditor
    CKEDITOR.replace(editorName);
    codeEditorCount++;
 }
 </script>
</html>
核心改动说明
  • 给计数变量设置初始值,每次新增编辑器都会生成唯一的name属性,避免冲突
  • 把CKEditor初始化逻辑放到textarea插入DOM的逻辑之后,确保初始化时目标元素已经存在
  • 删除了页面加载阶段无效的editor2初始化代码

内容的提问来源于stack exchange,提问作者Bilawal shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:21:02