如何检查textarea vs CKEDITOR?

时间:2018-03-26 20:26:06

标签: javascript jquery ckeditor

我需要捕获最后一次聚焦的输入并稍后将其粘贴到其中。

我已经设法捕获最后关注的HTML输入字段(在focusin事件上使用jQuery)或CKEDITOR编辑器(在焦点事件上使用CKEDITOR API)。因为我将这个最后一个对象存储在一个var lastFocusedInput(jQuery对象或CKEDITOR编辑器对象)中,现在我需要确定它是CKEDITOR还是jQuery对象,因为它们有不同的方法来粘贴数据。

任何想法如何以比这样测试更复杂的方式做到这一点:

function isjQueryObject(o)
{
    return (o && (o instanceof jQuery || o.constructor.prototype.jquery));
}

function isCKEditorObject(o)
{
    return (o && (typeof CKEDITOR !== undefined) && (typeof o.insertHtml !== undefined));
}

2018-03-29编辑

与此同时,由于需要在代码的其他方面重用,我最终还是进行了类型测试。

function TypeTester()
{
    var result = function (test)
    {
        return test ? true : false;
    };

    // jQuery [object Function]
    this.jQuery = function (o)
    {
        return result(o
            && (o instanceof jQuery || o.constructor.prototype.jquery)
        );
    };

    // CKEDITOR [object Object]
    this.CKEDITOR =
    {
        object: function (o)
        {
            return result(o
                && o.replaceClass === 'ckeditor'
            );
        },

        instance: function (o)
        {
            return result(o
                && o.insertHtml !== undefined
                && o.insertText !== undefined
            );
        },
    };
};
var isTypeOf = new TypeTester();

var lastFocusedInput = new Object(
{
    object: null,
    insert: function (content)
    {
        if (!this.object) return;

        switch (true)
        {
            case isTypeOf.jQuery(this.object) :
                this.object.insertAtCaret(content);
                break;

            case isTypeOf.CKEDITOR.instance(this.object) :
                this.object.insertHtml(content);
                break;
        }
    },
});

1 个答案:

答案 0 :(得分:1)

如您所知,存储时的对象类型然后将其存储为

var lastFocusedInput= { type:'jQuery', theObject: theObjectToStore};

然后像这样访问

if(lastFocusedInput.type == 'jQuery'){
  //get jquery object -> lastFocusedInput.theObject
}else{
 //get CKEDITOR object ->  lastFocusedInput.theObject
}

或使用两个容器

如果要存储的对象是jQuery

var $lastFocusedInput = theObjectToStore;
var CKElastFocusedInput= null;

反之亦然

访问

if($lastFocusedInput){// use jquery API on object }
else{ // use CKEDITOR API on object }