CKEDITOR replace()引用元素不起作用

时间:2017-04-27 13:21:04

标签: jquery ckeditor

我想知道为什么我不能在replace()上调用元素上的CKEDITOR函数,但如果我给该元素一个ID,我可以调用replace引用那个ID? 这是我的功能(ele来自onclick=myFunction(this)

myFunction(ele){
    if(~$(ele).closest("ul").attr("class").indexOf("sh_connect")){
        var _sh = $(ele).closest("li").find("[name='shortcode[]']");
        _sh.attr("id","curr_edit");
        //CKEDITOR.replace(_sh) //doesn't work
        CKEDITOR.replace('curr_edit'); //works
        console.log(_sh); //prints [textarea#curr_edit.form-control, prevObject: r.fn.init(1)]
    }
}

如何调用replace()仅引用该元素?

2 个答案:

答案 0 :(得分:1)

var _sh = $(ele).closest("li").find("[name='shortcode[]']");为您提供了一个jQuery对象。您需要迭代它以访问每个DOM元素并像这样调用replace()

_sh.each(function() {
    CKEDITOR.replace(this);
});

或者,如果你知道find()只返回一个元素,你可以像这样使用DOM元素:

CKEDITOR.replace(_sh.get(0));

CKEDITOR.replace(_sh[0]);

更多信息:

.each()

  

.each()方法旨在使DOM循环结构简洁   并且不易出错。调用时,它遍历DOM元素   这是jQuery对象的一部分。每次回调运行时,它都是   从0开始传递当前循环迭代。更重要的是,   回调是在当前DOM元素的上下文中触发的,所以   关键字this指的是元素。

.get()

  

.get()方法授予对每个jQuery对象下面的DOM节点的访问权限。指定索引后,.get( index )将检索单个元素。

     

console.log( $( "li" ).get( 0 ) );

     

每个jQuery对象也伪装成一个数组,因此我们可以使用数组解除引用运算符来获取列表项:

     

console.log( $( "li" )[ 0 ] );

答案 1 :(得分:0)

<textarea id="myfield" name="myfield"></textarea>
...
CKEDITOR.replace( 'myfield' );

var textarea = document.body.appendChild( document.createElement( 'textarea' ) );
CKEDITOR.replace( textarea );