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

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的属性时?


当前回答

你可以创建一个非常简单的jQuery-plugin来查询一个元素:

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

然后你可以简单地使用$("#dataTable").hasData('timer')

陷阱:

仅当值不存在时才返回false (is undefined);如果它被设置为false/null, hasData()仍然会返回true。 它不同于内置的$. hasdata(),后者只检查是否设置了元素上的任何数据。

其他回答

这里所有的答案都使用了jQuery库。

但是普通的javascript非常简单。

如果你只想在id为#dataTable的元素也具有data-timer属性的情况下运行脚本,那么步骤如下:

// Locate the element
const myElement = document.getElementById('dataTable');

// Run conditional code
if (myElement.dataset.hasOwnProperty('timer')) {

  [... CODE HERE...]

}

错误答案——见最后的EDIT

让我以Alex的回答为基础。

为了防止创建一个不存在的数据对象,我最好这样做:

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

然后,其中$this没有创建数据对象,$。hasData返回false,它不会执行$this.data(key)。

编辑:函数$. hasdata (element)只适用于使用$设置的数据。数据(元素,键,值),而不是元素。数据(关键字,值)。因此,我的答案不正确。

还有:

if ($('#dataTable[data-timer]').length > 0) {
    // logic here
}

你可以使用jQuery的hasData方法。

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

hasdata (element)的主要优点是,如果当前不存在数据对象,它不会创建数据对象并将其与元素关联。相比之下,jQuery.data(element)总是返回一个数据对象给调用者,如果之前不存在数据对象,则创建一个。

这只会检查元素上是否存在任何数据对象(或事件),它不能确认它是否有一个“timer”对象。

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

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