javascript - 使用 JavaScript 检查 HTML 片段是否有效

标签 javascript html validation

我需要一个可靠的 JavaScript 库/函数来检查我可以从我的代码中调用的 HTML 片段是否有效。例如检查打开的标签和引号是否关闭,嵌套是否正确等。

我不希望验证失败,因为有些东西不是 100% 标准(但无论如何都会起作用)。

最佳答案

更新:这个答案是有限的——请看下面的修改。

扩展@kolink 的回答,我使用:

var checkHTML = function(html) {
  var doc = document.createElement('div');
  doc.innerHTML = html;
  return ( doc.innerHTML === html );
}

即,我们用 HTML 创建一个临时的 div。为了做到这一点,浏览器会根据 HTML 字符串创建一个 DOM 树,这可能涉及关闭标签等。

将 div 的 HTML 内容与原始 HTML 进行比较将告诉我们浏览器是否需要更改任何内容。

checkHTML('<a>hell<b>o</b>')

返回错误。

checkHTML('<a>hell<b>o</b></a>')

返回真。

编辑:正如@Quentin 在下面指出的那样,出于多种原因,这是过于严格:浏览器通常会修复省略的结束标记,即使结束标记对于那个标签。例如:

<p>one para
<p>second para

...被认为是有效的(因为允许 Ps 省略结束标记)但是 checkHTML 将返回 false。浏览器还将规范化标记大小写,并改变空格。在决定使用此方法时,您应该了解这些限制。

关于javascript - 使用 JavaScript 检查 HTML 片段是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10026626/

相关文章:

javascript - 弹出而不是向下

javascript - 英语和爱尔兰电话号码的正则表达式

ruby-on-rails - 真的需要验证外键吗?

javascript - 使用 Gmail API 和 Javascript 发送 HTML 格式的电子邮件

html - 导航栏和 iframe 之间的空白

php - 创建 php 数据库并显示其内容

asp.net-mvc-4 - MVC 验证在 Knockoutjs 帖子中丢失

javascript - 单击事件在循环中多次触发

javascript - 如何处理超出范围的值? switch 还是 if 语句?

javascript - 在 Laravel 5.1 Controller 中的 Create 方法上从多个输入值编码和传递 JSON 对象