2016-07-29 8 views
0

jQuery DataTablesプラグイン(バージョン1.10)を使用する従来のコードを使用しています。古いコードの一部はjQueryオブジェクトを渡し、古いコードの一部はDataTables API objectsを渡します。すべての新しいコードをjQueryオブジェクトまたはDataTables APIオブジェクトのいずれかを受け入れるようにしたいと思いますが、変数がDataTables APIオブジェクトを参照するときに検出できませんでした。jQuery-DataTables APIオブジェクトのテスト

唯一の検出方法はありますかAPIのisDataTableが適切でない - テーブルの文字列セレクタを使用して、選択がDataTableになったかどうかを返します。

の「クラス検出」メソッドは動作しません。 typeof"object"constructor.name"Object"を返します。instanceofまたはisPrototypeOfに使用するコンストラクタについてはわかりません。

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

私は想像することが意味します(同じ質問に)this answerで示唆したように

Object.prototype.toString.call(var)戻り"[object Object]" Chromeの場合

console.log(var)は、それが他のクラスの情報を持っているように見える要約を作成しますどこかで使うことができるものですが、this questionはChromeがその名前を取得する場所については有用な答えがありません。

変数がjQuery-DataTables APIオブジェクトを参照するときは、どのように検出できますか?

答えて

1

Chromeでブレークポイントを使用すると、さらに多くを掘り下げることができます。 DataTable変数の直後にブレークポイントを設定して変数を評価すると、完全なマップが得られます。私はそれをして、これを見つけた:

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

警告はtrueを返します。 (myOptionsはDataTableのすべてのオプションを含むオブジェクトです)そこで、私は何をテストできるかを見るためにオブジェクト(私はmyOptionsを使用しました)を見ました。 myOptions.$undefinedと評価されるため、myOptions.$.__dt_wrapperが偽であるかどうかは直接テストできません。したがって:

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

グーグル "__dt_wrapper"では、DataTablesとは無関係のリンクは表示されません。 datatables.jsを見ると、2回発生します。どちらの場合も、DataTableオブジェクトを表すために使用される内部属性、またはオブジェクトがDataTableラッパーであるかどうかを示します。

これは文書化されていないため、将来のすべてのバージョンのDataTableで動作する保証はありません。しかし、これはDataTables 1.10.11で動作します。

編集:私はDataTableのフォーラム(link)でこれについて尋ね、実際にこれを行うためのクリーンな方法があります:オブジェクトがDataTableのであれば

myObjectVariable instanceof $.fn.DataTable.Api 

は本当です。 (これは小文字のdataTableオブジェクトでも機能します)

+0

"!+"は構文エラーです。 "!="の入力ミスであると思われます – ShadSterling

+0

私はDataTables 1.10.3を使用していますソリューションが機能します。ありがとう! – ShadSterling

+0

ようこそ。それを聞いてうれしく思いますが、私はこの質問をDataTablesフォーラムに投稿して、Allan Jardineがそれを処理するより良い方法を持っているかどうかを見ていきます。私はこれがラインのどこかで壊れるかもしれないと懸念しています。はい、それは構文エラーです、私の悪いです。私はそれを修正します、ありがとう。愚かなシフトキー。 – BobRodes