以下を実行できる方法はありますか?
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(', '));
#dataTable の ID を持つ要素に 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(', '));
#dataTable の ID を持つ要素に data-timer という属性がある場合のみ?
if ($("#dataTable").data('timer')) {
...
}
true
これは、データ属性が空の文字列または「falsey」値 (または など) でない場合に0
のみ返されることに注意してくださいfalse
。
データ属性の存在を確認したい場合は、空であっても、次のようにします。
if (typeof $("#dataTable").data('timer') !== 'undefined') {
...
}
if (typeof $("#dataTable").data('timer') !== 'undefined')
{
// your code here
}
上記とは異なる回答を提供するために; 次のように確認できます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
}
}
このソリューションがここにある他のソリューションよりも優れていると言っているわけではありませんが、少なくとも別のアプローチです...
または、いくつかのバニラJSと組み合わせる
if ($("#dataTable").get(0).hasAttribute("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
}
jQuery の hasData メソッドを使用できます。
http://api.jquery.com/jQuery.hasData/
jQuery.hasData(element) の主な利点は、データ オブジェクトが存在しない場合、データ オブジェクトを作成して要素に関連付けないことです。対照的に、jQuery.data(element) は常にデータ オブジェクトを呼び出し元に返し、データ オブジェクトが存在しない場合はデータ オブジェクトを作成します。
これは、要素にデータ オブジェクト (またはイベント) が存在するかどうかのみをチェックします。具体的に「タイマー」オブジェクトがあるかどうかは確認できません。
css属性の選択で確認できます
if ($('#dataTable').is('[data-timer]')) {
// data-timer attribute exists
}
間違った答え - 最後の EDIT を参照してください
アレックスの答えに基づいて構築しましょう。
データ オブジェクトが存在しない場合にデータ オブジェクトが作成されないようにするには、次のようにすることをお勧めします。
$.fn.hasData = function(key) {
var $this = $(this);
return $.hasData($this) && typeof $this.data(key) !== 'undefined';
};
次に、$this
データ オブジェクトが作成されていない where が$.hasData
返され、false
実行されません$this.data(key)
。
編集:関数$.hasData(element)
は、データが$.data(element, key, value)
ではなくを使用して設定された場合にのみ機能しelement.data(key, value)
ます。そのため、私の答えは正しくありません。
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(', '));
}