我想知道为什么我不能在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()
仅引用该元素?
答案 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()
方法旨在使DOM循环结构简洁 并且不易出错。调用时,它遍历DOM元素 这是jQuery对象的一部分。每次回调运行时,它都是 从0开始传递当前循环迭代。更重要的是, 回调是在当前DOM元素的上下文中触发的,所以 关键字this
指的是元素。
.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 );