有什么方法可以运行以下内容:
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的属性?
答案 0 :(得分:253)
if ($("#dataTable").data('timer')) {
...
}
注意,如果data属性不是空字符串或“falsey”值,则仅返回true
。 0
或false
。
如果要检查数据属性是否存在,即使为空,也请执行以下操作:
if (typeof $("#dataTable").data('timer') !== 'undefined') {
...
}
答案 1 :(得分:106)
if (typeof $("#dataTable").data('timer') !== 'undefined')
{
// your code here
}
答案 2 :(得分:35)
为了提供与上述答案不同的答案;您可以使用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
}
}
不是说这个解决方案比其他任何解决方案更好,但至少它是另一种方法......
答案 3 :(得分:10)
您可以使用jQuery的hasData方法。
http://api.jquery.com/jQuery.hasData/
jQuery.hasData(element)的主要优点是,如果当前不存在,它不会创建数据对象并将其与元素关联。相反,jQuery.data(element)总是将一个数据对象返回给调用者,如果以前没有数据对象,则创建一个数据对象。
这将仅检查元素上是否存在任何数据对象(或事件),它将无法确认它是否具有“计时器”对象。
答案 4 :(得分:10)
或与一些香草JS结合
if ($("#dataTable").get(0).hasAttribute("data-timer")) {
...
}
答案 5 :(得分:8)
如果要区分空值和缺失值,可以使用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
}
答案 6 :(得分:7)
您可以创建一个非常简单的jQuery插件来查询元素:
$.fn.hasData = function(key) {
return (typeof $(this).data(key) != 'undefined');
};
然后您只需使用$("#dataTable").hasData('timer')
陷阱:
false
(undefined
};如果设置为false
/ null
,则hasData()
仍会返回true
。$.hasData()
不同,内置{{1}}仅检查是否设置了元素上的任何数据。答案 7 :(得分:3)
我发现动态设置数据元素的效果更好:
if ($("#myelement").data('myfield')) {
...
}
答案 8 :(得分:1)
错误答案 - 请参阅最后的编辑
让我以Alex的答案为基础。
如果数据对象不存在,为了防止创建数据对象,我最好这样做:
$.fn.hasData = function(key) {
var $this = $(this);
return $.hasData($this) && typeof $this.data(key) !== 'undefined';
};
然后,如果$this
没有创建数据对象,$.hasData
会返回false
,并且不会执行$this.data(key)
。
编辑:$.hasData(element)
功能仅在使用$.data(element, key, value)
而非element.data(key, value)
设置数据时才有效。因此,我的答案不正确。
答案 9 :(得分:1)
我需要一个简单的布尔值来使用。因为它未定义不存在,而不是假,我使用!!
转换为布尔值:
var hasTimer = !!$("#dataTable").data('timer');
if( hasTimer ){ /* ....... */ }
另一种解决方案是使用过滤器:
if( $("#dataTable").filter('[data-timer]').length!==0) { /* ....... */ }
答案 10 :(得分:1)
在我看来,这是最简单的解决方案是选择具有特定数据属性的所有元素:
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(', '));
答案 11 :(得分:1)
这里的所有答案都使用jQuery库。
但是香草javascript非常简单。
如果仅当id
为#dataTable
的元素具有data-timer
属性时才运行脚本,则步骤如下:
// Locate the element
const myElement = document.getElementById('dataTable');
// Run conditional code
if (myElement.dataset.hasOwnProperty('timer')) {
[... CODE HERE...]
}
答案 12 :(得分: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(', '));
}
答案 13 :(得分:0)
您可以通过
选择css属性进行检查if ($('#dataTable').is('[data-timer]')) {
// data-timer attribute exists
}
答案 14 :(得分:0)
那怎么样:
if ($('#dataTable[data-timer]').length > 0) {
// logic here
}