207

以下を実行できる方法はありますか?

var data = $("#dataTable").data('timer');
var diffs = [];

for(var i = 0; i + 1 < data.length; i++) {
    diffs[i] = data[i + 1] - data[i];
}

alert(diffs.join(', '));

#dataTable の ID を持つ要素に data-timer という属性がある場合のみ?

4

15 に答える 15

339
if ($("#dataTable").data('timer')) {
  ...
}

trueこれは、データ属性が空の文字列または「falsey」値 (または など) でない場合に0のみ返されることに注意してくださいfalse

データ属性の存在を確認したい場合は、空であっても、次のようにします。

if (typeof $("#dataTable").data('timer') !== 'undefined') {
  ...
}
于 2012-08-28T14:12:33.890 に答える
118
if (typeof $("#dataTable").data('timer') !== 'undefined')
{
    // your code here
}
于 2012-08-28T14:11:33.707 に答える
38

上記とは異なる回答を提供するために; 次のように確認できますObject.hasOwnProperty(...)

 if( $("#dataTable").data().hasOwnProperty("timer") ){
     // the data-time property exists, now do you business! .....
 }

または、繰り返し処理したいデータ要素が複数ある場合は、.data()オブジェクトを変数化して、次のように繰り返し処理できます。

 var objData = $("#dataTable").data();
 for ( data in objData ){
      if( data == 'timer' ){
            //...do the do
      }
 }

このソリューションがここにある他のソリューションよりも優れていると言っているわけではありませんが、少なくとも別のアプローチです...

于 2014-04-08T14:21:22.967 に答える
13

または、いくつかのバニラJSと組み合わせる

if ($("#dataTable").get(0).hasAttribute("data-timer")) {
  ...
}
于 2014-12-10T09:24:01.113 に答える
12

空の値と欠損値を区別したい場合は、jQuery を使用してこのように確認できます。

<div id="element" data-foo="bar" data-empty=""></div>

<script>
"foo" in $('#element').data(); // true
"empty" in $('#element').data(); // true
"other" in $('#element').data(); // false
</script>

したがって、元の質問から、これを行います。

if("timer" in $("#dataTable").data()) {
  // code
}
于 2016-03-24T01:09:09.310 に答える
11

jQuery の hasData メソッドを使用できます。

http://api.jquery.com/jQuery.hasData/

jQuery.hasData(element) の主な利点は、データ オブジェクトが存在しない場合、データ オブジェクトを作成して要素に関連付けないことです。対照的に、jQuery.data(element) は常にデータ オブジェクトを呼び出し元に返し、データ オブジェクトが存在しない場合はデータ オブジェクトを作成します。

これは、要素にデータ オブジェクト (またはイベント) が存在するかどうかのみをチェックします。具体的に「タイマー」オブジェクトがあるかどうかは確認できません。

于 2012-08-28T14:14:24.273 に答える
1

css属性の選択で確認できます

if ($('#dataTable').is('[data-timer]')) {
   // data-timer attribute exists
}
于 2014-03-07T15:03:14.990 に答える
1

間違った答え - 最後の EDIT を参照してください

アレックスの答えに基づいて構築しましょう。

データ オブジェクトが存在しない場合にデータ オブジェクトが作成されないようにするには、次のようにすることをお勧めします。

$.fn.hasData = function(key) {
    var $this = $(this);
    return $.hasData($this) && typeof $this.data(key) !== 'undefined';
};

次に、$thisデータ オブジェクトが作成されていない where が$.hasData返され、false実行されません$this.data(key)

編集:関数$.hasData(element)は、データが$.data(element, key, value)ではなくを使用して設定された場合にのみ機能しelement.data(key, value)ます。そのため、私の答えは正しくありません。

于 2014-08-05T23:13:10.137 に答える
0
var data = $("#dataTable").data('timer');
var diffs = [];

if( data.length > 0 ) {
for(var i = 0; i + 1 < data.length; i++) {
    diffs[i] = data[i + 1] - data[i];
}

alert(diffs.join(', '));
}
于 2012-08-28T14:14:39.313 に答える