【问题标题】:How to detect invalid HTML in AngularJs (unmatched tags)如何检测 AngularJs 中的无效 HTML(不匹配的标签)
【发布时间】:2017-04-03 03:58:04
【问题描述】:

对于普通的旧 HTML,我使用 W3C validation service,但它反对 Angualr 指令。

我遇到了WARNING: Tried to load angular more than once 的问题,我阅读的一些可能的解决方案表明它是由格式错误的 HTML 引起的,特别是未封闭的标签。

如何检测此类问题?

显然,我已经检查过我没有直接包含 Angular 两次

【问题讨论】:

  • 嗯,我要做的第一件事是检查你正在加载 Angular 的行,看看它们是否可以以某种方式运行多次。
  • 模板也可能是一个不那么明显的地方,它可能会被错误地加载。一些框架也可能捆绑它,所以如果你使用任何可能是一个地方的缩小/捆绑脚本。
  • 好点,但是:我没有自己创建的任何模板,但会验证项目中的所有模板。希望缩小的脚本不包含 HTML。在这两种情况下,我都依赖成千上万的其他用户来查找我使用的通用代码中的任何问题,

标签: html angularjs validation


【解决方案1】:

Angular 不会“看到”你的原始 HTML

这里真正的诀窍是 JavaScript(以及 Angular)不能直接与您的 HTML 一起工作。它适用于页面的 DOM,它是从您的 HTML 创建的。

当浏览器creates a DOM from HTML 时,主要的事情之一就是“自动更正”HTML 中的任何错误。因此,Angular 甚至不会看到 HTML 中的错误——它只会看到生成的“自动更正”的 DOM。 (当然,您的 HTML 中的错误越多,就越有可能以某种方式自动更正导致您出现问题的内容。)

理论上,您可以将页面的 HTML 源代码与生成的 DOM 进行比较,以找出可能是错误的差异。在实践中,这将是一个很大的问题,并且容易报告大量误报。

那么,我们可以验证来自网站的 HTML 吗?

如果您想从网页验证您的 HTML 标记,最好的方法是安装您的支持良好的 HTML 验证器实例(如 W3C’s validator)并挂钩。

您可以使用一点 jQuery(如果您使用 AngularJS 很可能拥有)来捕获页面的 DOM:

var domString = $("html").prop("outerHTML");

然后,只需将该字符串作为输入发布到您最喜欢的验证器。

我认为您需要将此 DOM 字符串的验证与 HTML 的验证进行比较,因为原始 HTML 中的错误更有可能是您的问题所在。

【讨论】:

  • 嗨,蒂姆 (+1)。如上所述,我确实对普通的 HTML 使用 W3C 验证器。我想诀窍是以某种方式捕获 Angular 看到的页面并将其提供给 W3C 验证器。知道该怎么做吗?
  • 根据我的经验,Angular HTML 很少是有效的 HTML5,如果您在属性指令前加上 data-,您可以使其更多有效。我认为使用元素指令永远不会验证。您可能可以在验证后使用过滤来优化输出以更好地满足您的需求 - 验证后有一个按钮 Message FilteringAttribute ___ not allowed on element ___ at this point. 至少是您很可能想要取消选中的一个开始
【解决方案2】:

我想说正确的缩进和一个好的 IDE 是你在这方面最好的工具 - 我个人使用 PHPStorm(WebStorm 也会这样做)进行我的 Angular 开发,默认情况下会突出显示角度属性的警告,但是以红色突出显示未关闭的标签/引号等错误

缩进可以防止打开标签之类的事情,IDE 可以帮助在属性上使用打开引号,这可能是最有可能导致问题的 2 个问题。

【讨论】:

  • 好点(+1)。碰巧,我使用 WebStorm。我还对齐我的 HTML 标签的缩进。我有几十个 HTML 文件,我 ng-include 正在寻找一种不需要手动打开每个文件并查找错误标记的方法
  • 使用检查代码功能将允许您一次检查多个文件:)。右键单击目录>检查代码
  • 在 WebStorm 2016 中,在左侧的 Project 视图中,我可以看到顶级目录中的文件,但看不到子目录 :-(
  • 尝试在项目的根目录(或其中一个子目录)上单击右键 > 同步 - 无论您单击哪个,它都会刷新项目视图
  • 认为同步项目根目录没有让它们出现?我唯一的其他想法是,也许您正在使用更改文件项目视图或类似的东西(可以从项目窗口的左上角更改)
猜你喜欢
  • 2010-10-09
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
相关资源
最近更新 更多