2016-07-29 20 views
0

我正在使用混合使用jQuery DataTables插件的舊版代碼(版本1.10。一些舊代碼繞過jQuery對象,並且一些舊代碼通過DataTables API objects傳遞。我想讓所有新的代碼接受一個jQuery對象或一個DataTables API對象,但是我一直未能檢測到一個變量引用了一個DataTables API對象。測試jQuery-DataTables API對象

我能找到的唯一檢測方法在API中,isDataTable不適用 - 它爲表格選擇一個字符串並返回該選擇是否已轉換爲數據表格。

中的「類別檢測」方法不工作; typeof返回"object",constructor.name返回"Object",我不知道用於instanceofisPrototypeOf的構造函數。

正如this answer建議(以同樣的問題),Object.prototype.toString.call(var)返回"[object Object]"

在Chrome中,console.log(var)產生看起來有一些其他類的信息摘要:

▶ _Api {context: Array[1], selector: Object, ajax: Object} 

我想,意味着有是我可以使用的地方,但this question關於Chrome的名稱沒有有用的答案。

如何檢測變量引用jQuery-DataTables API對象的時間?

回答

1

您可以在Chrome中使用斷點來挖掘更多內容。如果你在一個DataTable變量之後設置一個斷點,然後評估這個變量,你會得到一個完整的地圖。我做到了,發現這個:

var myDataTable = $('#myTable').DataTable(myOptions); 
alert(myDataTable.$.__dt_wrapper); 

該警報返回true。 (myOptions是包含DataTable的所有選項的對象。)所以,我查看了一個對象(我使用了myOptions)來查看我可以測試的內容。您無法直接測試myOptions.$.__dt_wrapper)是否爲假,因爲myOptions.$的計算結果爲undefined。所以:

if(undefined != myObjectVariable.$ && myObjectVariable.$.__dt_wrapper) { 
    alert('A DataTable Object') 
} else { 
    alert('Not a DataTable Object') 
} 

谷歌搜索「__dt_wrapper」不顯示無關的數據表的任何鏈接。看看datatables.js,它會發生兩次。這兩種情況都表明它是用於表示DataTable對象的內部屬性,或者更具體地說是一個對象是否是DataTable包裝器。

由於這是無證的,所以不能保證它可以在所有未來版本的DataTable中工作。但是這在DataTables 1.10.11中有效。

編輯:我問了一下這對數據表論壇(link),並有確實是一個更清潔的方式來做到這一點:

myObjectVariable instanceof $.fn.DataTable.Api 

如果對象是一個DataTable是真實的。 (這也適用於小寫dataTable對象。)

+0

「!+」是語法錯誤,我假設這是「!=」的錯字 – ShadSterling

+0

原來我使用的是DataTable 1.10.3,解決方案工作謝謝! – ShadSterling

+0

不客氣。很高興聽到它,但我會在DataTables論壇上發佈這個問題,看看艾倫賈丁是否有更好的方法來處理它。我擔心這可能會突破某處。是的,這是一個語法錯誤,我的錯誤。我會解決它,謝謝。愚蠢的換檔鍵。 – BobRodes