HTML中的属性值需要多长时间?
我在新应用程序中使用HTML5样式数据属性(data-foo="bar"
),在一个地方存储数据的公平数据(超过100个字符)非常方便。虽然我怀疑这个数量很好,但它提出了多少太多的问题?
答案 0 :(得分:246)
从HTML 4的角度来看,属性是SGML构造。它们的限制在SGML Declaration of HTML 4:
中定义QUANTITY SGMLREF ATTCNT 60 -- increased -- ATTSPLEN 65536 -- These are the largest values -- LITLEN 65536 -- permitted in the declaration -- NAMELEN 65536 -- Avoid fixed limits in actual -- PILEN 65536 -- implementations of HTML UA's -- TAGLVL 100 TAGLEN 65536 GRPGTCNT 150 GRPCNT 64
这里讨论的值是“ATTSPLEN”,它将是元素属性规范列表的限制(应该是该元素的所有属性的总大小)。上面的注释提到应该避免使用固定限制,因此在大多数实现中除了可用内存之外没有其他实际限制。
HTML 5似乎有所不同,正如the spec所说,“这个版本的HTML因此返回到非SGML基础。”
稍后,在描述如何解析HTML 5时,会出现以下段落(强调添加):
下面描述的算法放置 DOM树的深度无限制 已生成,或长度为标记 名称,属性名称,属性 值,文本节点等 鼓励实施者避免 任意限制,这是公认的 可能存在实际问题 强制用户代理强制嵌套 深度限制。
所以我想这是你的答案。
答案 1 :(得分:131)
我只是written a test将长度 1000万的字符串放入属性中,然后再次检索它,它运行正常(Firefox 3.5.2&Internet Explorer 7 )
5000万使浏览器挂起“这个脚本需要很长时间才能完成”消息。
答案 2 :(得分:3)
我真的不认为有任何限制。我知道你现在可以做到
<a onclick=" //...insert 100KB of javascript code here">
它工作正常。虽然有点难以理解。
答案 3 :(得分:3)
9.1.2.3属性
元素的属性是 在元素的开头内表达 标签
属性具有名称和值。 属性名称必须由一个或 除了空间之外的更多角色 字符,U + 0000 NULL,U + 0022 引号(“),U + 0027 APOSTROPHE ('),U + 003E GREATER-THAN SIGN(&gt;), U + 002F SOLIDUS(/)和U + 003D EQUALS SIGN(=)字符,控件 字符和任何字符 不是由Unicode定义的。在里面 HTML语法,属性名称可能是 写下任何低和 - 的混合 大写字母是ASCII 不区分大小写的匹配 属性的名称。
属性值是文本的混合 和字符引用,除了 额外的限制 文字不能含有歧义 符号
属性可以指定为四个 不同的方式:
空属性语法
不带引号的属性值语法
单引号属性值语法
- 醇>
双引号属性值语法
这里没有提到属性值大小的限制。所以我认为应该没有。
您还可以根据
验证您的文档答案 4 :(得分:1)
我从来没有听说过属性的长度有任何限制。
在HTML 4.01规范中,在section on Attributes中没有任何提及任何限制。
HTML 4.01 DTD中的相同 - 实际上,据我所知,DTD不允许您指定属性的长度。
如果在HTML 4中没有任何内容,我不会想到HTML 5会出现类似的内容 - 我实际上在HTML 5的9.1.2.3 Attributes部分中看不到任何长度限制
答案 5 :(得分:1)
来自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类型的参数,名称和值。 该值的类型为DOMString,它直接映射到JavaScript String。
来自http://bytes.com/topic/javascript/answers/92088-max-allowed-length-javascript-string:
JavaScript String的最大长度是特定于实现的。
[注意:chrome报告bytes.com是恶意软件的来源,所以要小心]
答案 6 :(得分:0)
SGML定义属性,限制集为65k charecters,如下所示: http://www.highdots.com/forums/html/length-html-attribute-175546.html
虽然你正在做什么,但你应该没事。 至于上限,我已经看到jQuery使用数据属性也包含几个k数据。
答案 7 :(得分:0)
最近在Edge(版本81.0.416.58(64位))中进行了测试,数据属性似乎限制为64k。