<ui-select>的W3C验证

8
我正在网站中使用angular-ui-select,其中样式化的选择字段配置了一个名为ui-select的自定义标签。这个工作得很好,但是进行W3C验证会导致以下错误:

元素ui-select不允许作为div元素的子元素出现在此上下文中。(从此子树中抑制更多错误。)

下面是一个示例代码:
<!doctype html>
<html lang="en">
<head><title>x</title></head>
<body>
 <div>
  <ui-select></ui-select>
 </div>
</body></html>

我明白<ui-select>不应该存在,但我应该如何更好地处理它?
我可以将其包装在另一个标签中,或者是否有其他方法可以使用ui-select而不是使用HTML标记?

我不理解这个问题。验证器永远不会通过那个元素,因为在HTML规范中根本不存在这样的东西。 - Rob
3个回答

17
W3C HTML5 验证器维护者在此。目前验证器的行为是,对于您在文档中使用的任何自定义元素,验证器都会发出错误,并且目前您作为用户无法解决这个问题,直到我们找到解决方案为止。我们正在进行一些关于如何解决这个问题的讨论。将验证器更改为忽略任何带连字符的元素名称不是一个完整的解决方案,因为这样做的后果是我们实际上不能检查它可能具有的任何子元素,我们只能忽略整个子树,否则会导致其他错误。因此,这远远不是一个理想的解决方案。
无论如何,我都希望能找到一个解决这个问题的好方法,如果其他人有想法,我很愿意听取。可以向public-webapps@w3.org邮件列表https://lists.w3.org/Archives/Public/public-webapps/和whatwg@whatwg.org邮件列表https://whatwg.org/mailing-list#specs发送想法/提议。
我自己想到的一个想法是,我们可以让验证器像目前对待<div>元素一样处理所有自定义元素(就允许在文档中的位置以及允许包含哪些子元素而言)。虽然这也不完美,但至少它会给出一种检查自定义元素子树中后代元素错误的方法。

更新2017-02-06:W3C HTML检查器现在支持自定义元素

因此,我于2016年12月16日向W3C HTML检查器(验证器)添加了对自定义元素的支持,几天后完善了禁用名称的更详细检查。

我最终想出的实现方法是,在核心上是基于RelaxNG语法/模式的验证器体系结构中添加一个预处理过滤器,将任何具有连字符的元素名称的元素放入单独的XML命名空间中。

然后我更新了RelaxNG模式,允许该XML命名空间中的任何元素出现在任何位置。(这很讽刺,因为我几乎讨厌XML命名空间及其引起的所有问题。)
所以我们现在正在考虑类似于自定义属性名称的事情 - 可能只是将其定义为包含连字符的任何属性名称(例如自定义元素名称)。
但是,在HTML规范更新以允许自定义属性名称之前,无法更改HTML检查器以允许它们。有关此问题,请参见在HTML-spec问题跟踪器中讨论的提案

5

这确实是一个与AngularJS长期相关的问题。

以下是您可以做的几件事:

不要使用元素<ui-select>, 可以使用<div ui-select>, 但是这仍然无法解决参数错误的问题。

前缀为x-data-的参数将会被传递,但我不确定ui-select是否支持这种方式。

HTML W3C验证对于HTML电子邮件非常有用,因此它们不会被标记为垃圾邮件。对于搜索引擎也很重要,但确实不是非常关键。

如果您查看 'why validate',原因主要是为了清洁度,容易调试和总体良好的习惯。

不幸的是,Angular扩展了HTML5的可能性,以一种自然而然地偏离最新的HTML规范的方式。


1
谢谢。这对于像ng-*这样的属性确实有效,但不适用于标签。将标签更改为x-ui-select或data-ui-select并没有改变任何内容,它仍然无效。 - favo
作为一个元素,它将是无效的,但作为属性<div x-ui-select>,它应该通过。 - MrE
通过这个拉取请求 https://github.com/angular-ui/ui-select/pull/579,它将成为完美的解决方案。 - favo
@Oriol 调整了那个句子,使其更准确,同时保留了相同的意思。 - TylerH
@Oriol,你的链接指向一个“草案”,正如W3C本身所述,“供审查而非实施”,因此它还不是规范。 - MrE
显示剩余2条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接