Según the dataset spec, ¿cómo se supone que element.dataset elimina los atributos de datos? Considere:Cómo eliminar los atributos data- * utilizando el conjunto de datos HTML5
<p id="example" data-a="string a" data-b="string b"></p>
Si hace esto:
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'});
el DOM se convierte esto en Chrome y 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>
Los imitadores de aplicación Chrome/Firefox setAttribute. Básicamente se aplica .toString()
primero. Esto tiene sentido para mí, excepto para el tratamiento de null
porque esperaría que null
eliminaría el atributo. De lo contrario, ¿cómo el conjunto de datos API hacer el equivalente de:
elem.removeAttribute('data-a');
Y qué decir de los atributos booleanos:
<p data-something>
es equivalente a <p data-something="">
Hmm.
'delete obras elem.dataset.foo'! – ryanve
Nota; 'delete v.dataset.foo;' no funcionará en Safari. Una solución de navegador cruzado sería; 'v.removeAttribute ('data-foo')' –
@maximdim, ¿podría actualizar su respuesta para incluir el comentario de Jeremy? Incluso en Safari 10, esto sigue siendo un problema. Safari 11 corrige esto (verificada con Safari Technical Preview) – Dogoku