답변:
if ($("#dataTable").data('timer')) {
...
}
참고 이것은 true
데이터 속성이 빈 문자열 또는 "falsey"값이 아닌 경우 에만 반환 합니다 (예 : 0
또는) false
.
비어있는 경우에도 data 속성이 있는지 확인하려면 다음을 수행하십시오.
if (typeof $("#dataTable").data('timer') !== 'undefined') {
...
}
if ($("#dataTable[data-timer]").length) { ... }
.
if ( $("#dataTable").is("[data-timer]") ) { ... }
. 다른 jQuery 객체의 테이블에 대한 참조가 이미있는 경우에도 더 유용합니다.
if (typeof $("#dataTable").data('timer') !== 'undefined')
{
// your code here
}
typeof
체크인 에 추가해야합니다
$('#dataTable').data('timer', Date.now())
. OP가 실제 데이터 속성이 있는지 확인하려고합니다. 이 경우 @niiru의 솔루션 (또는 해당 솔루션에 대한 의견으로 제공하는 솔루션)이 더 좋습니다.
undefined
일관된 방식으로 확인하는 것 입니다. 왜 우리는 알고 typeof
를 확인하기 위해 사용되는 undefined
경우에, 그러나 나는 그것이 확인되고보고 혼란을 찾을 것 와 함께 typeof
한 곳과 하지 않고 다른에서. 게다가, 그것은 사용하지 같은 typeof
추가합니다 훨씬 더 복잡한 코드. 좀 더 명시적일 수도 있고 아마도 중복 될 수도 있지만 지나치게 복잡하지 않을 수도 있습니다. 나는 당신의 요점을 알지만 그것을 사용하지 않으면 지나치게 단순화 될 것이라고 말하고 싶습니다. ;]
위의 답변과 다른 답변을 제공하기 위해; 다음과 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
}
}
이 솔루션이 여기에있는 다른 솔루션보다 낫다는 말은 아니지만 적어도 다른 접근법입니다 ...
data-foo-bar
을 가지고 있다면 수표는 .data().hasOwnProperty("fooBar")
그렇지 않아야합니다..data().hasOwnProperty("foo-bar")
jQuery의 hasData 메소드를 사용할 수 있습니다.
http://api.jquery.com/jQuery.hasData/
jQuery.hasData (element)의 주요 장점은 현재 존재하지 않는 데이터 요소를 생성하고 요소와 연관시키지 않는다는 것입니다. 반대로 jQuery.data (element)는 항상 데이터 객체를 호출자에게 반환하여 이전에 데이터 객체가 존재하지 않는 경우 생성합니다.
이것은 요소에 데이터 객체 (또는 이벤트)가 있는지 확인하기 때문에 특별히 "타이머"객체가 있는지 확인할 수 없습니다.
빈 값과 누락 된 값을 구별하려면 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-plugin을 만들어 요소를 쿼리 할 수 있습니다.
$.fn.hasData = function(key) {
return (typeof $(this).data(key) != 'undefined');
};
그럼 당신은 단순히 사용할 수 있습니다 $("#dataTable").hasData('timer')
잡았다 :
false
값이 존재하지 않는 경우에만 리턴 합니다 (is undefined
). 이에 설정되어있는 경우 false
/ null
그것은 hasData()
여전히 돌아갑니다 true
.$.hasData()
있는 경우에만 검사를하면 어떤 요소에 대한 데이터가 설정됩니다.여기에있는 모든 답변은 jQuery 라이브러리를 사용합니다.
그러나 바닐라 자바 스크립트는 매우 간단합니다.
당신이 가진 요소에만 스크립트를 실행하려는 경우 id
의 #dataTable
도가 이 data-timer
속성을, 그 다음 단계는 다음과 같습니다 :
// Locate the element
const myElement = document.getElementById('dataTable');
// Run conditional code
if (myElement.dataset.hasOwnProperty('timer')) {
[... CODE HERE...]
}
오답-마지막에 편집 참조
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)
. 그로 인해 내 대답이 정확하지 않습니다.
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(', '));
}
.data('timer')
가 정의되어 있지 않으면 TypeError가 발생합니다 : $ (...). data (...)는 확인할 때 정의되지 않습니다data.length
. 이것은 OP의 질문의 기초 일 가능성이 높습니다. 즉, data.length
다른 곳에서 안전하게 확인할 수 있는지 확인하십시오 . 게다가 data
문자열, 배열 또는 객체 인지 여부를 반드시 확실하게 말할 수있는 것은 아니며 후자는 length
정의 된 속성으로 포함하거나 포함하지 않을 수 있습니다 .
data-
속성에 저장된 내용이 없지만 jQuery에 저장된 데이터가 있고 그 반대의 경우도 있다는 것입니다.