是否有一些方法,我可以运行以下:
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 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的属性时?
当前回答
你可以通过css属性选择来检查
if ($('#dataTable').is('[data-timer]')) {
// data-timer attribute exists
}
其他回答
if (typeof $("#dataTable").data('timer') !== 'undefined')
{
// your code here
}
我发现这种方法在动态设置数据元素时效果更好:
if ($("#myelement").data('myfield')) {
...
}
还有:
if ($('#dataTable[data-timer]').length > 0) {
// logic here
}
或者结合一些香草JS
if ($("#dataTable").get(0).hasAttribute("data-timer")) {
...
}
错误答案——见最后的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)只适用于使用$设置的数据。数据(元素,键,值),而不是元素。数据(关键字,值)。因此,我的答案不正确。