我需要捕获最后一次聚焦的输入并稍后将其粘贴到其中。
我已经设法捕获最后关注的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;
}
},
});
答案 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 }