232

HTML 中的属性值有多长?

data-foo="bar"在一个新应用程序中使用 HTML5 样式数据属性 ( ),在一个地方存储大量数据(超过 100 个字符)非常方便。虽然我怀疑这个数量是可以的,但它提出了多少是太多的问题?

4

8 回答 8

292

HTML 4

从 HTML 4 的角度来看,属性是一种 SGML 构造。它们的限制在HTML 4 的 SGML 声明中定义:

         数量 SGMLREF
                  ATTCNT 60 -- 增加 --
                  ATTSPLEN 65536 -- 这些是最大值 --
                  LITLEN 65536——在声明中允许——
                  NAMELEN 65536 -- 在实际中避免固定限制 --
                  PILEN 65536 -- HTML UA 的实现 --
                  TAGLVL 100
                  泰格伦 65536
                  GRGTCNT 150
                  玻璃钢 64

这里讨论的值是“ATTSPLEN”,它是元素属性规范列表的限制(应该是该元素所有属性的总大小)。然而,上面的注释提到应该避免固定限制,因此在大多数实现中,除了可用内存之外,可能没有真正的限制。

HTML 5

看起来HTML 5 对属性值的长度没有限制

正如规范所说,“这个版本的 HTML 因此返回到非 SGML 基础。”

稍后,在描述如何解析 HTML 5 时,出现以下段落(强调添加):

下面描述的算法 对生成的 DOM 树的深度或标签名称、属性名称、属性值、文本节点等的长度没有限制。虽然鼓励实现者避免任意限制,但认识到实际问题可能会强制用户代理施加嵌套深度限制。

因此,(理论上)HTML 5 属性的长度/大小没有限制

于 2009-09-30T04:54:12.417 回答
159

我刚刚编写了一个测试(注意!请参阅下面的更新),它将长度为1000 万的字符串放入属性中,然后再次检索它,它工作正常(Firefox 3.5.2 和 Internet Explorer 7)

5000 万使浏览器挂起并显示“此脚本需要很长时间才能完成”消息。

更新:我已经修复了脚本:它之前将 innerHTML 设置为一个长字符串,现在它正在设置一个数据属性。https://output.jsbin.com/wikulamuni它对我有用,长度为 1 亿。YMMV。

el.setAttribute('data-test', <<a really long string>>)
于 2009-09-30T04:49:02.590 回答
8

我真的不认为有任何限制。我知道现在你可以做到

<a onclick=" //...insert 100KB of javascript code here">

它工作正常。虽然有点看不懂。

于 2009-09-30T04:42:22.597 回答
4

来自HTML5 语法文档

9.1.2.3 属性

元素的属性在元素的开始标记内表示。

属性具有名称和值。属性名称必须包含一个或多个字符,而不是空格字符、U+0000 NULL、U+0022 引号 (")、U+0027 APOSTROPHE (')、U+003E GREATER-THAN SIGN (>)、U+ 002F SOLIDUS (/), and U+003D EQUALS SIGN (=) characters, control characters, and any characters that not defined by Unicode. 在 HTML 语法中,属性名称可以任意混合大小写字母这是属性名称的不区分大小写的 ASCII 匹配项。

属性值是文本和字符引用的混合,除了文本不能包含不明确的 & 符号的附加限制。

可以通过四种不同的方式指定属性:

  1. 空属性语法

  2. 不带引号的属性值语法

  3. 单引号属性值语法

  4. 双引号属性值语法

这里没有提到对属性值大小的限制。所以我认为应该没有。

您还可以根据

HTML5 验证器(高度实验性)

于 2009-09-30T04:47:27.023 回答
2

我从未听说过对属性长度有任何限制。

在 HTML 4.01 规范中,在属性部分中没有提到任何限制。

HTML 4.01 DTD中也是如此——事实上,据我所知,DTD 不允许您指定属性的长度。

如果在 HTML 4 中没有这方面的内容,我不认为 HTML 5 会出现类似的情况——而且我实际上在 HTML 5 的9.1.2.3 属性部分中也没有看到任何长度限制。

于 2009-09-30T04:42:35.220 回答
2

来自http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data

每个 HTML 元素都可以指定任意数量的自定义数据属性,并带有任意值。

用于解析/处理这些 data-* 属性值的内容将有限制。

结果数据属性和值被放置在 DOMStringMap 对象中。这没有固有的限制。

来自http://dev.w3.org/html5/spec/Overview.html#domstringmap

注意:此处的 DOMStringMap 接口定义仅适用于 JavaScript 环境。其他语言绑定将需要定义如何为这些语言实现 DOMStringMap

DOMStringMap 是一个带有 getter、setter、greator 和 deleter 的接口。setter 有两个 DOMString 类型的参数,名称和值。该值是直接映射到 JavaScript 字符串的 DOMString 类型。

http://bytes.com/topic/javascript/answers/92088-max-allowed-length-javascript-string:

JavaScript 字符串的最大长度是特定于实现的。

[注意:chrome 将 bytes.com 报告为恶意软件的来源,因此请注意 ]

于 2009-09-30T05:04:34.867 回答
0

SGML 使用 65k 字符的限制集定义属性,见此处: http ://www.highdots.com/forums/html/length-html-attribute-175546.html

虽然对于你正在做的事情,你应该没问题。至于上限,我已经看到 jQuery 使用数据属性个人也持有几 k 数据。

于 2009-09-30T04:49:22.567 回答
0

最近在 Edge(版本 81.0.416.58(64 位))中测试,数据属性似乎有 64k 的限制。

于 2020-04-21T13:43:42.590 回答