我在一个网站中使用角用户界面选择,其中样式选择字段配置了一个名为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?
发布于 2015-02-13 22:48:57
对于AngularJS来说,这确实是一个众所周知的问题。
你可以做几件事:
您可以使用<ui-select>,而不是使用元素<div ui-select>,但这仍然会在参数上失败。
以x-或data-为前缀的参数将通过,但我不确定ui-select是否支持这一点。
HTML验证是有用的,但我认为最重要的是W3C电子邮件,这样它们就不会被筛选为垃圾邮件。这对搜索引擎也有好处,但并不是很关键。
如果您查看“为什么要验证”,其主要原因是清洁、易于调试和总体良好实践。
幸运的是,角(un?)扩展了HTML5的可能性范围,其方式自然偏离了最新的HTML规范。
发布于 2015-02-25 04:17:39
这里是W3C HTML5验证器维护者。现在,关于验证器的行为,简单的回答是,验证器将为您在文档中使用的任何自定义元素发出错误,而目前您作为一个用户无法绕过它来完成此操作--它将持续一段时间,直到我们找到解决方案为止。
我们正在讨论如何解决这个问题。将验证器更改为只忽略任何元素名作为一个完整的解决方案是不可行的,因为这样做的结果是我们不能实际地检查它可能具有的任何子元素--我们只需要忽略整个子树,因为否则会导致其他错误。因此,这远远不是一个理想的解决方案。
不管怎么说,我很想找到解决这个问题的好办法,所以如果别人有想法,我想听听。在这方面有两个好地方可以发送想法/建议:public-webapp@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现在支持自定义元素
所以,我增加了对自定义元素的支持。 to W3C (验证器)在2016-12-16和几天后改进它,做更详细的检查被禁止的名字。
最后,我找到了在检查器体系结构中实现它的诀窍--它的核心是基于RelaxNG语法/模式的验证器--添加一个预处理筛选器,该筛选器接收元素名中有连字符的任何元素,并将它们放在一个单独的XML命名空间中。
然后,我更新了RelaxNG模式,以便允许来自该XML命名空间的任何元素。(这很讽刺,因为我非常讨厌XML名称空间及其引发的所有问题。)
因此,我们现在正在考虑对自定义属性名称执行类似的操作--可能只是将它们定义为包含连字符的任何属性名称(比如自定义元素名称)。
但是,在HTML规范更新之前,HTML检查器不能更改为允许自定义属性名称。为了这个,请参阅HTML规范问题跟踪器中正在讨论的建议。。
发布于 2015-09-08 09:09:39
我们在使用Knockout自定义组件时也遇到了同样的问题。http://knockoutjs.com/documentation/component-overview.html
我添加了一个建议,即如何通过对希望使用自定义元素的用户进行轻微的增强来增强验证器,即使规范尚未最终确定(http://w3c.github.io/webcomponents/spec/custom/#custom-tag-example):
https://stackoverflow.com/questions/28508533
复制相似问题