Ответ 1
Не удалял бы элемент remove dataset? Например:.
<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>
В соответствии с спецификацией набора данных, как 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="">
Hmm.
Не удалял бы элемент remove dataset? Например:.
<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>
Это необходимо для удаления всех атрибутов data- *. Вы можете добавить условие в цикл for для удаления только определенного атрибута data-. Надеюсь это поможет :)
var elem = document.querySelector('#example');
var dataset = elem.dataset;
for (var key in dataset) {
elem.removeAttribute("data-" + key.split(/(?=[A-Z])/).join("-").toLowerCase());
}
<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.
});