Как удалить атрибуты data- *, используя набор данных HTML5 - PullRequest
31 голосов
/ 09 февраля 2012

Согласно спецификации набора данных , как element.dataset предназначен для удаления атрибутов данных?Рассмотрим:

<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 станет таким в Chrome и 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>

Имитация реализации Chrome / Firefox SetAttribute .Это в основном относится .toString() в первую очередь.Это имеет смысл для меня, за исключением обработки null, потому что я ожидаю, что null удалит атрибут.Иначе, как API набора данных делает эквивалент:

elem.removeAttribute('data-a');

А как насчет логических атрибутов:

<p data-something> эквивалентно <p data-something=""> Хмм.

Ответы [ 3 ]

44 голосов
/ 09 февраля 2012

Не «удалить» удалить элемент набора данных?Например:

<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 голосов
/ 24 мая 2019

Это удалить все атрибуты data- *.Вы можете добавить условие в цикл for для удаления только определенного атрибута данных.Надеюсь, это поможет:)

var elem = document.querySelector('#example');
var dataset = elem.dataset;
for (var key in dataset) {
    elem.removeAttribute("data-" + key.split(/(?=[A-Z])/).join("-").toLowerCase());
}
0 голосов
/ 19 мая 2014
<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.
});
...