【问题标题】:How to programmatically determine name of CKEditor instance如何以编程方式确定 CKEditor 实例的名称
【发布时间】:2016-02-24 09:51:58
【问题描述】:

我已在我的 ASP.NET 页面的代码隐藏中以编程方式将 CKEditor 实例添加到我的页面:

VB.NET:

itemEditor = New CkEditor
cell.Controls.Add(itemEditor)

... 效果很好。我可以在回发中获取 HTML 并用它做一些事情。

但是,我还想用它做一些客户端的事情,特别是从另一个控件中取出一个选定的项目,然后通过处理 onchange 事件将其插入到文本中。

那么,我怎样才能在 JavaScript 中获取编辑器实例的名称,以便我可以执行以下操作:

function GetCkText()
{
    var htmlFromEditor = CKEDITOR.instances['editorName'].getData();
    // do stuff with htmlFromEditor
}

【问题讨论】:

    标签: javascript ckeditor


    【解决方案1】:

    假设您只有一个编辑器实例:

    for ( var i in CKEDITOR.instances ){
       var currentInstance = i;
       break;
    }
    var oEditor   = CKEDITOR.instances[currentInstance];
    

    以下是 JavaScript API 关于instances 的说明。

    这是定义 CKEditor 的另一种方式。这里的 'fck' 是输入字段 id:

    CKEDITOR.replace( 'fck', {
        customConfig : prefix + 'js/ckeditor/config.js',
        height: 600,
        width: 950
    });
    
    editor = CKEDITOR.instances.fck;
    

    注意我是如何使用.fck 引用实例的。

    【讨论】:

    • 谢谢,工作正常 - 更不用说了。但是,一个问题,如果我可以的话。由于我的大部分工作都是 .NET 服务器端的(而且我做了很少的 JS),我习惯于实例集合是对象本身的集合......而你的示例中的“i”是编辑器实例姓名。我怎么知道这一点 - 这种语法是否暗示了默认属性?
    • 如果你知道很简单,currentInstance的值就是你的编辑器textarea的HTML id。示例currentInstance='editor1'.
    • 有没有办法分配实例名称?? ... ...我试过CKEDITOR.appendTo( "my_div" , {name:"my_editor"}, my_string )
    • @dsdsdsdsd 查看我的编辑我认为这可能会满足您的问题
    • 有趣...这似乎不适用于.appendTo ...但确实适用于.replace(如您所示)
    【解决方案2】:

    如果您只有一个实例并且您不知道它的名称。

    CKEDITOR.instances[Object.keys(CKEDITOR.instances)[0]].getData()
    

    【讨论】:

      【解决方案3】:

      以下代码:

      var allInstances=CKEDITOR.instances;
      for ( var i in allInstances ){
          alert(allInstances[i].name);
      }
      

      对我来说很好。

      【讨论】:

        【解决方案4】:

        嗯,我找到了一种方法……但我不太喜欢它……

        添加编辑器后,我在页面中添加了一个隐藏字段控件,并将编辑器的 ClientId 放入其值中:

        Dim hdn As New HiddenField
        With hdn
            .ID = "HiddenField"
            .Value = itemEditor.ClientID
        End With
        cell.Controls.Add(hdn)
        

        .. 然后在 JavaScript 中,我可以得到隐藏字段,因此编辑器名称如下:

        function GetCkText()
        {
            var hdn = document.getElementById("HiddenField");
            var editorName = hdn.getAttribute("value");
            var editor = CKEDITOR.instances[editorName];
            alert(editor.getData());
            return false;
        }
        

        但至少可以这么说,这有点不雅。谁有更好的方法?

        【讨论】:

          【解决方案5】:

          如果您使用CKEDITOR.appendTo(...),请记住 ckeditor 确实会在内部创建实例名称。因此,您可以在创建该名称后立即查询该名称,然后将其存储在某处,以便以后使用。

          var lvo_editor = CKEDITOR.appendTo( "my_div" , null , lvs_html ) ; 
          my_global_var  = lvo_editor.name                                 ;
          

          顺便说一句:CKEDITOR.replace(...) 方法允许您定义实例名称(参见上面的答案)

          【讨论】:

            【解决方案6】:

            如果您需要来自插件的实例,至少在版本 4+ 中您可以这样做。

            CKEDITOR.currentInstance
            

            这里我想知道我应用了ckeditor的textarea的名称。

            CKEDITOR.currentInstance.name
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-07-03
              • 2010-09-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-05-20
              相关资源
              最近更新 更多