【问题标题】:Should AngularJS apps be HTML5-compliant?AngularJS 应用程序应该与 HTML5 兼容吗?
【发布时间】:2015-09-02 00:43:19
【问题描述】:

我正在熟悉 AngularJS,并且我注意到可以通过在指令前加上 data- 来使您的模板代码符合 HTML5 标准。 (例如,data-ng-repeat="..." 而不是 ng-repeat="..."。)

我的第一反应是给我所有的指令加上前缀,但我一直在想:有没有令人信服的理由这样做?是否有任何已确认的浏览器在无效 HTML 属性上出现故障的案例?一段时间后,在所有内容前面输入data- 会变得相当乏味,而且会降低 HTML 模板的可读性。

【问题讨论】:

    标签: javascript angularjs html standards web-standards


    【解决方案1】:

    属性名称必须包含一个或多个除空格字符之外的字符,U+0000 NULL、U+0022 QUOTATION MARK (")、U+0027 APOSTROPHE (')、">" (U+003E)、" /" (U+002F) 和 "=" (U+003D) 字符、控制字符和任何未由 Unicode 定义的字符。在 HTML 语法中,属性名称,甚至是外来元素的名称,都可以写成与属性名称的 ASCII 大小写不敏感匹配的小写和大写字母的任意组合。

    http://www.w3.org/TR/html/syntax.html#attributes-0

    自定义数据属性旨在存储页面或应用程序私有的自定义数据,没有更合​​适的属性或元素。

    http://www.w3.org/TR/html5/dom.html#custom-data-attribute

    经过更多挖掘,我找到了data-* 属性的部分。但是,它并没有真正说这是“必须”。它更像是“我们建议使用它”。

    Afaik,浏览器无法识别的属性将被忽略,但仍可通过 DOM 对象的 getAttribute 方法和 attributes 属性访问。出于语义和方便的考虑,data-* 通常是首选,尤其是在使用 dataset 时。

    类似地,旧版本的 Angular 甚至 recommends attribute name restrict 用于指令作为元素名称的替代,以限制 IE8 兼容性。指令通常具有自定义名称,这应该表明自定义属性名称很好。

    【讨论】:

    • 我看到lotliterature 提到data-* 作为在HTML 中存储附加语义数据的主要方式。此外,Official W3C HTML5 validator 在没有 data- 前面的自定义属性上发出错误。但你是对的:它似乎不在规范中......它改变了吗?
    • @AndyBarron 找到了data-* 属性的部分(只是阅读了整个文档的一部分)。但是,它不会强迫您使用它们。
    • 规范中的奇怪措辞,但它回答了它!
    猜你喜欢
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2014-03-10
    • 2016-05-11
    • 2018-11-19
    • 2011-03-27
    • 2012-01-23
    相关资源
    最近更新 更多