是否有一些方法,我可以运行以下:

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(', '));

只有在id为#dataTable的元素上有一个名为data-timer的属性时?


当前回答

我需要一个简单的布尔值。因为它没有定义不存在,而不是假的,我使用!!转换为布尔值:

var hasTimer = !!$("#dataTable").data('timer');
if( hasTimer ){ /* ....... */ }

另一种解决方案是使用过滤器:

if( $("#dataTable").filter('[data-timer]').length!==0) { /* ....... */ }

其他回答

为了提供与上述不同的答案;你可以像这样用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
      }
 }

并不是说这个解决方案比这里的任何其他解决方案都好,但至少它是另一种方法……

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(', '));
}

你可以通过css属性选择来检查

if ($('#dataTable').is('[data-timer]')) {
   // data-timer attribute exists
}

在我看来,这是最简单的解决方案,选择所有具有特定数据属性的元素:

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(', '));

下面是它如何工作的截图。

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

注意只有当数据属性不是空字符串或“假”值(如0或false)时,才返回true。

如果你想检查data属性是否存在,即使是空的,也要这样做:

if (typeof $("#dataTable").data('timer') !== 'undefined') {
  ...
}