向 DOM Element 对象添加属性有什么问题?

2023-12-29

我一直在寻找一个直接的答案(我可以想到很多可能性,但我想知道真正的原因):

jQuery 提供了 .data() 方法来将数据与 DOM Element 对象关联起来。是什么使得这有必要?直接向 DOM 元素对象添加属性(或方法)是否存在问题?它是什么?


直接向 DOM 元素对象添加属性(或方法)是否存在问题?

有潜力。

没有 Web 标准规定您可以向 DOM 节点添加任意属性。它们是具有特定于浏览器的实现的“主机对象”,而不是“本机 JavaScript 对象”,根据 ECMA-262,您可以使用“本机 JavaScript 对象”执行您喜欢的操作。其他主机对象不允许您添加任意属性。

事实上,由于最早的浏览器确实允许你这样做,所以这是一个de facto标准,你无论如何都可以......除非你故意告诉 IE 通过设置禁止它document.expando= false。您自己可能不会这样做,但如果您正在编写要部署在其他地方的脚本,那么您可能会担心。

任意属性存在一个实际问题,因为您不really知道您选择的任意名称在您尚未测试的某些浏览器中或在尚不存在的浏览器或标准的未来版本中不具有现有含义。添加属性element.sausage= true,并且您无法确定在空间和时间的任何地方没有任何浏览器会使用它作为信号来启用令人兴奋的 DOM Sausage 让浏览器崩溃功能。因此,如果您确实添加任意属性,请确保给它一个不太可能的名称,例如element._mylibraryname_sausage= true。这还有助于防止命名空间与可能添加任意属性的其他脚本组件发生冲突。

IE 中还有一个问题,即您添加的属性被错误地视为属性。如果您使用序列化元素innerHTML你会在输出中得到一个意想不到的属性,例如。<p _mylibraryname_sausage="true">。如果您随后将该 HTML 字符串分配给另一个元素,您将在新元素中获得一个属性,这可能会混淆您的脚本。

(请注意,这只发生在值为简单类型的属性上;对象、数组和函数不会显示在序列化的 HTML 中。我希望 jQuery 知道这一点,因为它的工作方式是围绕它来实现data方法绝对很糟糕,会导致错误,并减慢许多简单的 DOM 操作。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

向 DOM Element 对象添加属性有什么问题? 的相关文章

随机推荐

  • 更新浏览器地址栏而不重新加载

    我喜欢 facebook 在图像之间滚动时更改浏览器地址栏 URL 的方式 以及它在 IE7 上的工作方式 但是 我只找到了有关如何在 HTML5 浏览器上执行此操作的信息 并且我想支持 IE7 由于这是一个 HTML5 解决方案 因此如下
  • 如何为Notepad++编写宏?

    我想为 Notepad 编写一个宏 它应该分别用 char4 char5 char6 替换 char1 char2 char3 Notepad 中的宏只是一堆编码操作 您开始录制 对缓冲区进行操作 也许激活菜单 停止录制然后播放宏 经过调查
  • java中如何将日期时间转换为时间戳

    论坛会员 我在 java 中遇到一个日期时间问题 实际上我正在收到开始日期格式为 2012 02 27T01 10 10我想将收到的日期插入到具有日期时间数据类型的数据库中 实际上我尝试通过下面的代码将收到的开始日期转换为日期时间 Stri
  • Android Eclipse Lint API 检查

    谢谢 P T 看起来像是问题的正确答案在 Eclipse 中构建多 SDK Android 应用程序而不会丢失编译时检查 https stackoverflow com questions 7642249 但是 当我尝试按照建议使用 Tar
  • 读取 spacy 中的文本文件语料库

    我看到的使用 spacy 的所有示例都只是在单个文本文件 尺寸很小 中读取 如何将文本文件语料库加载到 spacy 中 我可以通过腌制语料库中的所有文本来使用 textacy 来做到这一点 docs textacy io spacy rea
  • Azure Blob、文件和磁盘存储

    快问 我已经阅读了大量有关 azure blob 文件 磁盘存储选项的信息 并且我有一个如此简单的存储要求 以至于我对最佳选择感到困惑 我正在阅读的大部分信息都完全超出了我的理解范围 我希望有人能够将视野缩小到更合理的优点 缺点 我的情况如
  • 快速排序与堆排序

    快速排序和堆排序都进行就地排序 哪个更好 首选哪种应用和案例 堆排序是 O N log N 保证的 这比快速排序中最坏的情况要好得多 堆排序不需要更多内存来让另一个数组像合并排序那样放置有序数据 那么为什么商业应用程序坚持使用快速排序呢 与
  • update_or_create 与 ManyToManyField

    我有 2 个模型 如下所示 class Subs models Model tag models CharField max length 100 class Users models Model name models CharField
  • ReactforwardRef 含义

    我不明白这有什么意义 const FancyButton React forwardRef props ref gt
  • 如何使用 ffmpeg 批量/顺序下载 m3u8 文件?

    我目前在 Mac 上使用以下命令单独下载 m38u 播放列表 ffmpeg i lt URL with m3u8 gt codec copy output ts 如果我想处理多个文件 我目前可以通过单独的终端窗口进行操作 我想做的是 在一个
  • Python 使用正则表达式替换

    例如 有谁知道如何将所有出现的 lt 20 应该转化为 r n lt 20 but gt HELLO lt asassdsa 应该保持不变 gt gt gt import re gt gt gt str lt 20 gt gt gt out
  • Angular Elements 和 Stencil 的技术概念

    技术概念是角元素 and Stencil相似的 角元素将是 Angular 6 中的一个新功能 您基本上可以将编写的 Angular 组件包装为 Web 组件 根据我的理解 生成的自定义元素只是通往 Angular 的桥梁 因此我们仍然必须
  • Maven 使用 git 发布插件,如果在处理过程中推送提交,则会出现错误

    我们使用 git 存储库和 Maven 发布插件 在第一个构建步骤中 我们将所有更改提取到本地存储库 然后在下一个构建步骤中运行mvn release prepare release perform release prepare更新工作区
  • 如何以编程方式修改 Open/Libreoffice odt 文档?

    我想在我的应用程序中使用 OO LO PDF 生成功能 为此 我需要能够从代码中修改之前生成的 odt 模板 修改只是简单的文本替换 甚至不需要正则表达式 OO 开发者指南 https wiki openoffice org wiki Do
  • TypeError:“Tensor”对象不支持 TensorFlow 中的项目分配

    我尝试运行这段代码 outputs states rnn rnn lstm cell x initial state initial state sequence length real length tensor shape output
  • 在 ORMLite 中为一个类创建多个表

    我在 Android 上使用 ORMLite 并有以下问题 是否可以基于单个 Java 类创建多个表 这些表应该仅在名称上有所不同 并且应该通过名称访问它们 例如 如果我有一堂课 public class Order DatabaseFie
  • 标签和文本块之间的区别

    根据训练套件 两者有什么区别Label控制和TextBlock控制 因为两者都是内容控件并且只显示文本 TextBlock 不是控件 虽然TextBlock位于 System Windows Controls 命名空间中 它不是一个控件 它
  • scipy.io:无法写入 wavfile

    我在将 2d numpy 数组写入波形文件 音频 时遇到问题 根据文档我应该写一个 2d int16 numpy 数组 https docs scipy org doc scipy 0 18 1 reference generated sc
  • 使用 PHP 进行树形图可视化?

    除了 PHP 之外 几乎所有语言似乎都有 TreeMap 的示例 有人有一些基本代码的链接吗 http www neurofuzzy net 2006 04 28 treemap php source code http www neuro
  • 向 DOM Element 对象添加属性有什么问题?

    我一直在寻找一个直接的答案 我可以想到很多可能性 但我想知道真正的原因 jQuery 提供了 data 方法来将数据与 DOM Element 对象关联起来 是什么使得这有必要 直接向 DOM 元素对象添加属性 或方法 是否存在问题 它是什