2012-02-08 1 views
24

Selon the dataset spec, comment element.dataset est-il prévu de supprimer des attributs de données? Considérez:Comment supprimer les attributs data- * à l'aide du jeu de données HTML5

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

Si vous faites ceci:

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 devient ceci dans Chrome et Firefox:

<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> 

La mise en œuvre Chrome/Firefox imitateurs setAttribute. Il s'applique d'abord .toString() en premier. Cela a du sens pour moi, sauf pour le traitement de null parce que je m'attendrais à ce que null supprime l'attribut. Sinon, comment l'API de jeu de données ne soit l'équivalent de:

elem.removeAttribute('data-a'); 

Et sur les attributs booléens:

<p data-something> est équivalent à <p data-something=""> Hmm.

Répondre

32

Ne supprimerait-il pas l'élément de dataset? .: par exemple

<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

'supprimer des œuvres elem.dataset.foo'! – ryanve

+8

Remarque: 'delete v.dataset.foo;' ne fonctionnera pas dans Safari. Une solution de navigateur croisé serait; 'v.removeAttribute ('data-foo')' –

+0

@maximdim, pouvez-vous s'il vous plaît mettre à jour votre réponse pour inclure le commentaire de Jeremy? Même dans Safari 10, c'est toujours un problème. Safari 11 corrige ceci (vérifié avec 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

Questions connexes