2012-02-08 3 views
24

the dataset spec에 따르면 element.dataset은 데이터 속성을 삭제하는 방법은 무엇입니까? 고려 :HTML5 데이터 세트를 사용하여 data- * 속성을 삭제하는 방법

<p id="example" data-a="string a" data-b="string b"></p> 

을 이렇게 할 경우 :

var elem = document.querySelector('#example'); 
elem.dataset.a = null; 
elem.dataset.b = undefined; 
elem.dataset.c = false; 
elem.dataset.d = 3; 
elem.dataset.e = [1, 2, 3]; 
elem.dataset.f = {prop: 'value'}; 
elem.dataset.g = JSON.stringify({prop: 'value'}); 

는 DOM은 크롬과 파이어 폭스에서이된다 :

<p id="example" 
    data-a="null" 
    data-b="undefined" 
    data-c="false" 
    data-d="3" 
    data-e="1,2,3" 
    data.f="[object Object]" 
    data.g="{"prop":"value"}" 
></p> 

크롬/파이어 폭스 구현을 모방 setAttribute. 기본적으로 우선 .toString()이 적용됩니다. 이것은 null의 치료를 제외하고 나에게 의미가 있습니다. 왜냐하면 나는 null이 속성을 제거 할 것으로 예상하기 때문입니다. 부울 속성에 대한

elem.removeAttribute('data-a'); 

그리고 무엇 : 그렇지 않으면 데이터 세트 API는 동등한 역할을합니까 방법

<p data-something>은 흠 <p data-something="">에 해당합니다.

답변

32

데이터 세트 요소를 '삭제'하지 않으시겠습니까? 예컨대 :

<div id="a1" data-foo="bar">test</div> 

<script> 
var v = document.getElementById('a1'); 
alert(v.dataset.foo); 
delete v.dataset.foo; 
alert(v.dataset.foo); 
</script> 
+0

'elem.dataset.foo' 작품을 삭제! – ryanve

+8

참고; 'delete v.dataset.foo; '는 Safari에서 작동하지 않습니다. 크로스 브라우저 솔루션은 다음과 같습니다. 'v.removeAttribute ('data-foo')' –

+0

@maximdim, Jeremy의 의견을 포함하도록 답변을 업데이트 해 주시겠습니까? Safari 10에서도 여전히 문제가됩니다. Safari 11이 수정되었습니다 (Safari Technical Preview에서 확인) – Dogoku

-5
<div data-id="test">test</div> 

$(document).ready(function(){ 
    $("div").removeAttr("data-id"); // removing the data attributes. 
    console.log($("div").data("id")); // displays in the console. 
}); 
+1

http : //jsfiddle.net/shakeellal/EjV5u/ – Shakeel

관련 문제