我正在使用使用jQuery DataTables插件(版本1.10 )的遗留代码。一些旧代码在jQuery对象周围传递,有些旧代码在DataTables API对象中传递。我想让所有新代码都接受jQuery对象或DataTables API对象,但是我还无法检测变量何时引用DataTables API对象。
我能在API中找到的唯一检测方法,isDataTable,是不合适的-它为一个表使用一个字符串选择器,并返回所选内容是否已被转换为DataTable。
这个答案中的“类检测”方法不起作用;typeof返回"object",constructor.name返回"Object",我不知道要为instanceof或isPrototypeOf使用构造函数。
正如这个答案中所建议的(同样的问题),Object.prototype.toString.call(var)返回"[object Object]"
在Chrome中,console.log(var)生成一个类似于其他类信息的摘要:
▶ _Api {context: Array[1], selector: Object, ajax: Object}我想这意味着我可以在某个地方使用一些东西,但是这个问题关于Chrome是从哪里得到的,这个名字没有什么有用的答案。
如何检测变量何时引用jQuery对象?
发布于 2016-07-31 07:33:59
你可以通过使用Chrome中的断点来挖掘更多信息。如果您在DataTable变量之后设置一个断点,并计算该变量,您将得到一个完整的映射。我这么做了,发现这个:
var myDataTable = $('#myTable').DataTable(myOptions);
alert(myDataTable.$.__dt_wrapper);警报返回true。(myOptions是一个包含DataTable所有选项的对象。)因此,我查看了一个对象(我使用了myOptions)来查看我可以测试什么。您不能直接测试myOptions.$.__dt_wrapper)是否为false,因为myOptions.$的计算结果为undefined。所以:
if(undefined != myObjectVariable.$ && myObjectVariable.$.__dt_wrapper) {
alert('A DataTable Object')
} else {
alert('Not a DataTable Object')
}谷歌搜索"__dt_wrapper“没有显示任何与DataTables无关的链接。看看datatables.js,它会发生两次。这两种情况都表明,它是用于表示DataTable对象的内部属性,或者更具体地说,表示对象是否是DataTable包装器。
由于这是无文档化的,因此不能保证它在所有未来版本的DataTables中都能工作。但这在DataTables 1.10.11中是可行的。
编辑:我在DataTables论坛(链接)上问过这个问题,确实有一个更干净的方法可以做到这一点:
myObjectVariable instanceof $.fn.DataTable.Api如果对象是DataTable,则为true。(这也适用于小写的dataTable对象。)
https://stackoverflow.com/questions/38667608
复制相似问题