是否有一些方法,我可以运行以下:
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的属性时?
当前回答
如果想要区分空值和缺失值,可以使用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
}
其他回答
错误答案——见最后的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)只适用于使用$设置的数据。数据(元素,键,值),而不是元素。数据(关键字,值)。因此,我的答案不正确。
你可以使用jQuery的hasData方法。
http://api.jquery.com/jQuery.hasData/
hasdata (element)的主要优点是,如果当前不存在数据对象,它不会创建数据对象并将其与元素关联。相比之下,jQuery.data(element)总是返回一个数据对象给调用者,如果之前不存在数据对象,则创建一个。
这只会检查元素上是否存在任何数据对象(或事件),它不能确认它是否有一个“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
}
}
并不是说这个解决方案比这里的任何其他解决方案都好,但至少它是另一种方法……
你可以创建一个非常简单的jQuery-plugin来查询一个元素:
$.fn.hasData = function(key) {
return (typeof $(this).data(key) != 'undefined');
};
然后你可以简单地使用$("#dataTable").hasData('timer')
陷阱:
仅当值不存在时才返回false (is undefined);如果它被设置为false/null, hasData()仍然会返回true。 它不同于内置的$. hasdata(),后者只检查是否设置了元素上的任何数据。