【问题标题】:Adding arbitrary information to createElement object向 createElement 对象添加任意信息
【发布时间】:2013-09-06 01:47:13
【问题描述】:

这个w3schools page 提到了HTML DOM createElement() 方法。例如,您可以通过

创建一个按钮

var btn = document.createElement("BUTTON");

现在,我想在此按钮上附加一些信息。什么是合适的方法?如果我想附加数组["one", "two", "three"],我可以这样做吗

btn.myOwnInformation = [“一”、“二”、“三”]

?

【问题讨论】:

  • DOM 不是用于数据,而是用于显示。您可能不应该使用它来存储任意数据。
  • @meagar 但我想将数据存储在按钮中,而不是 DOM 中。
  • 按钮在 DOM 中。它是一个 DOM 元素。正如您所说,“HTML DOM createElement 方法”。如果你真的想这样做,你可以看看 jQuery 如何使用它的data 方法存储任意数据。它是开源的。

标签: javascript html


【解决方案1】:

您可以使用 html5 数据属性向 DOM 元素添加任意数据。

btn.setAttribute('data-array','one,two,three');

使用split取回数据;

这是一个例子:jsFiddle

【讨论】:

  • 存储任意字符串数据和存储任意数据有很大的不同。
  • 好的,没错,但您始终可以在字符串中编码任意数据。不是你想要的。
【解决方案2】:

如果您尝试,这当然可以,但通常不鼓励这样做,原因如下:

  • 关注点分离
    DOM 用于显示结构和逻辑,因此任何其他类型的数据最好单独存储。

  • 与未来 DOM 规范的冲突
    如果您选择将来成为标准的属性或方法名称怎么办?您的代码在未来的浏览器上可能会出现错误。

  • 浏览器兼容性
    将数据附加到 DOM 对象时,旧浏览器 (IE 6/7) 可能会泄漏内存。现在问题不大了,但是由于浏览器提供的 JavaScript 对象(“宿主对象”)不太可控,我建议避免扩展它们(或它们的原型),除非你知道自己在做什么。

出于这些原因,像 jQuery 这样的库使用单独的结构来存储任意数据(以及事件处理程序)并将它们与 DOM 元素相关联。出于同样的原因,jQuery 将选定的 DOM 节点包装在 jQuery 对象中,而不是直接使用 appendcss 等方法扩展 DOM 接口。

相关问题和参考资料

【讨论】:

    【解决方案3】:

    如果你愿意使用 jQuery

    有一个功能可以满足你的要求

    jQuery.data()

    代码可以这样写:

    var $btn = $('<input type="button" value="buttonName">');
    $btn.data('keyName',["one", "two", "three"]);  //insert data
    var getData = $btn.data('keyName');  //get data by keyName
    

    (对不起,我没有足够的声望来使用表扬)

    【讨论】:

      猜你喜欢
      • 2013-09-10
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 2023-03-15
      • 2011-05-14
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      相关资源
      最近更新 更多