Theo the dataset spec, cách element.dataset có nghĩa là xóa thuộc tính dữ liệu? Xem xét:Cách xóa thuộc tính data- * bằng cách sử dụng tập dữ liệu HTML5
<p id="example" data-a="string a" data-b="string b"></p>
Nếu bạn làm điều này:
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 trở này trong Chrome và 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 thực hiện bắt chước setAttribute. Về cơ bản nó áp dụng .toString()
trước tiên. Điều này có ý nghĩa với tôi ngoại trừ việc xử lý null
vì tôi mong đợi rằng null
sẽ xóa thuộc tính. Nếu không như thế nào API dữ liệu làm tương đương với:
elem.removeAttribute('data-a');
Và những gì về các thuộc tính boolean:
<p data-something>
tương đương với <p data-something="">
Hmm.
'xóa tác phẩm elem.dataset.foo'! – ryanve
Lưu ý; 'delete v.dataset.foo;' sẽ không hoạt động trong Safari. Một giải pháp trình duyệt chéo sẽ là; 'v.removeAttribute ('data-foo')' –
@maximdim, bạn có thể vui lòng cập nhật câu trả lời của bạn để đưa vào nhận xét từ Jeremy không? Ngay cả trong Safari 10, đây vẫn là một vấn đề. Safari 11 sửa lỗi này (được kiểm tra bằng Bản xem trước kỹ thuật của Safari) – Dogoku