首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery-DataTables API对象的测试

jQuery-DataTables API对象的测试
EN

Stack Overflow用户
提问于 2016-07-29 21:15:34
回答 1查看 160关注 0票数 0

我正在使用使用jQuery DataTables插件(版本1.10 )的遗留代码。一些旧代码在jQuery对象周围传递,有些旧代码在DataTables API对象中传递。我想让所有新代码都接受jQuery对象或DataTables API对象,但是我还无法检测变量何时引用DataTables API对象。

我能在API中找到的唯一检测方法,isDataTable,是不合适的-它为一个表使用一个字符串选择器,并返回所选内容是否已被转换为DataTable。

这个答案中的“类检测”方法不起作用;typeof返回"object"constructor.name返回"Object",我不知道要为instanceofisPrototypeOf使用构造函数。

正如这个答案中所建议的(同样的问题),Object.prototype.toString.call(var)返回"[object Object]"

在Chrome中,console.log(var)生成一个类似于其他类信息的摘要:

代码语言:javascript
复制
▶ _Api {context: Array[1], selector: Object, ajax: Object}

我想这意味着我可以在某个地方使用一些东西,但是这个问题关于Chrome是从哪里得到的,这个名字没有什么有用的答案。

如何检测变量何时引用jQuery对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-31 07:33:59

你可以通过使用Chrome中的断点来挖掘更多信息。如果您在DataTable变量之后设置一个断点,并计算该变量,您将得到一个完整的映射。我这么做了,发现这个:

代码语言:javascript
复制
var myDataTable = $('#myTable').DataTable(myOptions); 
alert(myDataTable.$.__dt_wrapper);

警报返回true。(myOptions是一个包含DataTable所有选项的对象。)因此,我查看了一个对象(我使用了myOptions)来查看我可以测试什么。您不能直接测试myOptions.$.__dt_wrapper)是否为false,因为myOptions.$的计算结果为undefined。所以:

代码语言:javascript
复制
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论坛(链接)上问过这个问题,确实有一个更干净的方法可以做到这一点:

代码语言:javascript
复制
myObjectVariable instanceof $.fn.DataTable.Api

如果对象是DataTable,则为true。(这也适用于小写的dataTable对象。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38667608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档