javascript - 数据集对象和数据属性背后的想法是什么?

标签 javascript html custom-data-attribute

使用dataset对象和data-属性有什么好处?我觉得通过扩展 HTML DOM 对象并向它们添加属性可以完成同样的事情。 (我知道这段代码并不完全合理;这只是一个简单的例子)。

向 API 添加 data- 对象背后一定有某种想法。另外是否存在禁止向 DOM 对象添加属性的约定,或者这两种方法是否同样可以接受?如果这是有争议的,每种方法的优点和缺点是什么?

有一个涉及 jquery 版本数据对象的类似问题,但我假设 .data() 的操作有点不同,并且可能有不同的优点和缺点。

//dataset
let input = document.getElementById("userData");

input.addEventListener("change", function() {
  let value = input.value;
  input.dataset.value = value;
  console.log("input.dataset.value:" + input.dataset.value);
});

//dom objects extending
let input = document.getElementById("userData");

input.addEventListener("change", function() {
  let value = input.value;
  input.Val = value; //adds properties refering to html object state
  console.log("input.val:" + input.val);
});
<div class="userInput">
  <label for="userData">Type Something:</label><input type="text" id="userData">
</div>

最佳答案

这个想法是,您可以安全地扩展任何 html 元素,而无需 100% 知道当前、过去和 future 的 html 属性。

它也使 html 代码更容易阅读,因为看到后

<input sync>

我可以去搜索一下这个新的同步属性是什么?

但是

<input data-sync="true">

非常清楚它来自哪里(自定义属性稍后在js中用于添加行为或样式)

然后您可以使用 DOM 数据集 API 或 getAttribute 检索该值。

它还可以轻松地使用基于模板的语言(例如 PHP)包含数据。

在纯 JavaScript 设置中,我不会使用数据属性。 WeakMaps 允许您安全地扩展 DOM,或者您可以直接在 DOM 对象上设置键值对。

关于javascript - 数据集对象和数据属性背后的想法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46855677/

相关文章:

javascript - 如何使用 javascript 将动态数据从 html 数据属性传递到查询?

javascript - 如何使用用户输入动态传递数据集属性?

javascript - 将 Jquery 脚本与 AJAX 相结合

javascript - 视频插入 DOM 后不会在 chrome 上自动播放

javascript - Django/Jquery PreventDefault 仅适用于 for 循环的第一项

html - 超过最小宽度点的水平滚动条

javascript - jQuery .click 事件未向类注册

html - 中心分区;效果不佳

html - html页面中的无框文本字段

javascript - 如何在 JavaScript 代码中获取数据属性的值?