<ui-select> 的 W3C 验证
W3C validation for <ui-select>
我正在使用 angular-ui-select within a website where the styled select fields are configured with an own tag named ui-select
. This works great, but doing a W3C validation 导致此错误:
Element ui-select
not allowed as child of element div
in this context. (Suppressing further errors from this subtree.)
这是一个示例代码:
<!doctype html>
<html lang="en">
<head><title>x</title></head>
<body>
<div>
<ui-select></ui-select>
</div>
</body></html>
我知道 <ui-select>
预计不会出现,但我怎样才能更好地处理这个问题?
我可以将它包装到不同的标签中吗?或者 ui-select
是否有不同的方法而不是使用 HTML 标记?
这确实是 AngularJS 的一个众所周知的问题。
您可以做的几件事:
您可以使用 <div ui-select>
而不是使用元素 <ui-select>
,但这仍然会在参数上失败。
以 x-
或 data-
为前缀的参数将通过,但我不确定 ui-select
是否支持。
HTML W3C 验证很有用,但我认为对 HTML 电子邮件最重要,这样它们就不会被筛选为垃圾邮件。它对搜索引擎也有好处,但确实 不那么重要。
如果您查看“why validate”,原因主要是为了清洁、易于调试和整体良好实践。
Angular(联合国?)幸运地扩展了 HTML5 的可能性领域,在某种程度上,自然地偏离了 HTML.[=16 的最新规范=]
W3C HTML5 验证者维护者在这里。现在关于验证器行为的简短回答是,验证器将为您在文档中使用的任何自定义元素发出错误,目前您作为用户无法解决它——而且它将继续需要更长的时间,直到我们找到解决方案。
我们正在讨论如何解决这个问题。将验证器更改为仅忽略任何带有连字符的元素名称作为一个完整的解决方案是不可行的,因为这样做的结果是我们实际上无法检查它可能具有的任何子元素——我们只需要忽略整个子树,因为不这样做会导致其他错误。所以这远不是一个理想的解决方案。
无论如何,我很想找到解决这个问题的好方法,所以如果其他人有想法,我很想听听。发送 ideas/proposals 的两个好地方是 public-webapps@w3.org 邮件列表 https://lists.w3.org/Archives/Public/public-webapps/ and the whatwg@whatwg.org mailing list https://whatwg.org/mailing-list#specs
我自己想到的一个想法是,我们可以让验证器以与当前处理 <div>
元素相同的方式处理所有自定义元素(只要它在文档中允许的位置和它允许包含哪些子元素)。这也不够理想,但至少它会提供一种方法来检查自定义元素子树中后代元素的错误。
2017-02-06 更新:W3C HTML 检查器现在支持自定义元素
所以,I added support for custom elements to the W3C HTML Checker (validator) on 2016-12-16 and a few days later refined it to do more detailed checking for prohibited names.
我最终想出在检查器架构中实现它的技巧——它的核心是 RelaxNG grammar/schema-based 验证器——是添加一个预处理过滤器,它接受任何带有连字符的元素在它们的元素名称中,并将它们放在单独的 XML 命名空间中。
然后我更新了 RelaxNG 模式以允许来自 XML 命名空间的任何元素出现在任何地方。 (这很讽刺,因为我非常讨厌 XML 命名空间和它们引起的所有问题。)
所以我们现在正在考虑为自定义 属性 名称做类似的事情——可能只是将它们定义为包含连字符的任何属性名称(如自定义元素名字)。
但是 HTML 检查器无法更改为允许自定义属性名称,直到 HTML 规范更新为允许它们。为此,see the proposal being discussed in the HTML-spec issue tracker.
我们在使用 Knockout 自定义组件时遇到了同样的问题。
http://knockoutjs.com/documentation/component-overview.html
我添加了一个建议,即如何通过对想要使用自定义元素的用户进行小幅增强来增强验证器,即使规范尚未最终确定 (http://w3c.github.io/webcomponents/spec/custom/#custom-tag-example):
我正在使用 angular-ui-select within a website where the styled select fields are configured with an own tag named ui-select
. This works great, but doing a W3C validation 导致此错误:
Element
ui-select
not allowed as child of elementdiv
in this context. (Suppressing further errors from this subtree.)
这是一个示例代码:
<!doctype html>
<html lang="en">
<head><title>x</title></head>
<body>
<div>
<ui-select></ui-select>
</div>
</body></html>
我知道 <ui-select>
预计不会出现,但我怎样才能更好地处理这个问题?
我可以将它包装到不同的标签中吗?或者 ui-select
是否有不同的方法而不是使用 HTML 标记?
这确实是 AngularJS 的一个众所周知的问题。
您可以做的几件事:
您可以使用 <div ui-select>
而不是使用元素 <ui-select>
,但这仍然会在参数上失败。
以 x-
或 data-
为前缀的参数将通过,但我不确定 ui-select
是否支持。
HTML W3C 验证很有用,但我认为对 HTML 电子邮件最重要,这样它们就不会被筛选为垃圾邮件。它对搜索引擎也有好处,但确实 不那么重要。
如果您查看“why validate”,原因主要是为了清洁、易于调试和整体良好实践。
Angular(联合国?)幸运地扩展了 HTML5 的可能性领域,在某种程度上,自然地偏离了 HTML.[=16 的最新规范=]
W3C HTML5 验证者维护者在这里。现在关于验证器行为的简短回答是,验证器将为您在文档中使用的任何自定义元素发出错误,目前您作为用户无法解决它——而且它将继续需要更长的时间,直到我们找到解决方案。
我们正在讨论如何解决这个问题。将验证器更改为仅忽略任何带有连字符的元素名称作为一个完整的解决方案是不可行的,因为这样做的结果是我们实际上无法检查它可能具有的任何子元素——我们只需要忽略整个子树,因为不这样做会导致其他错误。所以这远不是一个理想的解决方案。
无论如何,我很想找到解决这个问题的好方法,所以如果其他人有想法,我很想听听。发送 ideas/proposals 的两个好地方是 public-webapps@w3.org 邮件列表 https://lists.w3.org/Archives/Public/public-webapps/ and the whatwg@whatwg.org mailing list https://whatwg.org/mailing-list#specs
我自己想到的一个想法是,我们可以让验证器以与当前处理 <div>
元素相同的方式处理所有自定义元素(只要它在文档中允许的位置和它允许包含哪些子元素)。这也不够理想,但至少它会提供一种方法来检查自定义元素子树中后代元素的错误。
2017-02-06 更新:W3C HTML 检查器现在支持自定义元素
所以,I added support for custom elements to the W3C HTML Checker (validator) on 2016-12-16 and a few days later refined it to do more detailed checking for prohibited names.
我最终想出在检查器架构中实现它的技巧——它的核心是 RelaxNG grammar/schema-based 验证器——是添加一个预处理过滤器,它接受任何带有连字符的元素在它们的元素名称中,并将它们放在单独的 XML 命名空间中。
然后我更新了 RelaxNG 模式以允许来自 XML 命名空间的任何元素出现在任何地方。 (这很讽刺,因为我非常讨厌 XML 命名空间和它们引起的所有问题。)
所以我们现在正在考虑为自定义 属性 名称做类似的事情——可能只是将它们定义为包含连字符的任何属性名称(如自定义元素名字)。
但是 HTML 检查器无法更改为允许自定义属性名称,直到 HTML 规范更新为允许它们。为此,see the proposal being discussed in the HTML-spec issue tracker.
我们在使用 Knockout 自定义组件时遇到了同样的问题。 http://knockoutjs.com/documentation/component-overview.html
我添加了一个建议,即如何通过对想要使用自定义元素的用户进行小幅增强来增强验证器,即使规范尚未最终确定 (http://w3c.github.io/webcomponents/spec/custom/#custom-tag-example):