HTML属性的长度是否有限制?

时间:2009-09-30 04:19:00

标签: html html5 custom-data-attribute

HTML中的属性值需要多长时间?

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

8 个答案:

答案 0 :(得分:246)

HTML 4

从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

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)

来自HTML5 syntax doc

  

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   不区分大小写的匹配   属性的名称。

     

属性值是文本的混合   和字符引用,除了   额外的限制   文字不能含有歧义   符号

     

属性可以指定为四个   不同的方式:

     
      
  1. 空属性语法

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

  4.   
  5. 单引号属性值语法

  6.   
  7. 双引号属性值语法

  8.   

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

您还可以根据

验证您的文档

HTML5 Validator(Highly Experimental)

答案 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。