简体   繁体   English

如何使用 HTML5 数据集删除 data-* 属性

[英]How to remove data-* attributes using HTML5 dataset

According to the dataset spec , how is element.dataset meant to delete data attributes?根据数据集规范element.dataset是如何删除数据属性的? Consider:考虑:

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

If you do this:如果你这样做:

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'});

the DOM becomes this in Chrome and Firefox: 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>

The Chrome/Firefox implementation mimics setAttribute . Chrome/Firefox 实现模仿setAttribute It basically applies .toString() first.它基本上首先应用.toString() This makes sense to me except for the treatment of null because I would expect that null would remove the attribute.除了对null的处理之外,这对我来说很有意义,因为我希望null会删除该属性。 Otherwise how does the dataset API do the equivalent of:否则,数据集 API 是如何执行以下操作的:

elem.removeAttribute('data-a');

And what about boolean attributes:那么布尔属性呢:

<p data-something> is equivalent to <p data-something=""> Hmm. <p data-something>等价于<p data-something="">嗯。

Wouldn't 'delete' remove dataset element?不会“删除”删除数据集元素吗? Eg:例如:

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

A rather simpler and straightforward approach:一个相当简单和直接的方法:

const someElement = document.querySelector('...');

Object.keys(someElement.dataset).forEach(dataKey => {
  delete someElement.dataset[dataKey];
});

This is to remove all the data-* attributes.这是为了删除所有 data-* 属性。 You can add a condition in the for loop to remove only particular data-attribute.您可以在 for 循环中添加条件以仅删除特定的数据属性。 Hope this helps :)希望这可以帮助 :)

var elem = document.querySelector('#example');
var dataset = elem.dataset;
for (var key in dataset) {
    elem.removeAttribute("data-" + key.split(/(?=[A-Z])/).join("-").toLowerCase());
}

As per MDN you need to use the delete operator to remove a dataset element根据MDN,您需要使用 delete 运算符来删除数据集元素

When you want to remove an attribute, you can use the delete operator.当你想删除一个属性时,你可以使用 delete 操作符。

 const p = document.getElementById('example') delete p.dataset.a delete p.dataset.b

<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.
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM