【发布时间】:2016-09-11 23:06:15
【问题描述】:
我正在寻找处理解析 HTML 或 XHTML(XML 序列化)标记并将其插入网页的 DOM 的最佳方法,该网页可以是 text/html 或 application/xhtml+xml。不打算使用像 jQuery 这样的库,只关心与最新版本的 Chrome 的兼容性。
我看到了两种可能的解决方案。
-
模板和内部HTML:
let temp = document.createElement('template'); temp.innerHTML = markuptext; document.body.appendChild(temp.content); -
DOMParser:
let parser = new DOMParser(); let doc = parser.parseFromString('<div xmlns="http://www.w3.org/1999/xhtml">' + markuptext + '</div>', 'application/xhtml+xml'); let frag = document.createDocumentFragment(), childNode; while (childNode = doc.documentElement.firstChild) { frag.appendChild(childNode); } document.body.appendChild(frag);
我希望有人能指出这两种方法的优缺点。
使用 Template & innerHTML 我假设 Chrome 会根据页面的内容类型选择解析为 HTML/XML,并且可能无法更改它。似乎 Template & innerHTML 允许像 <tr><td></td></tr> 这样的片段在 <tbody> 之外,无论它是解析为 HTML 还是 XML。 DOMParser 也允许这样做,但仅如果它被解析为 XML。
【问题讨论】:
-
DHTML 属性 innerHTML 是一个成熟的 HTML 解析器,在将 HTML 流序列立即转换为 DOM 树时高度优化且同样可靠(在所有浏览器引擎)。作为奖励,它还可以对不完整的流进行错误更正。
-
@BekimBacaj
"it may also be able to make error corrections on an incomplete stream"如果属实,我会认为这是负面的。 -
我认为这是一个好处——因为存在任何类型的数据结构语言的唯一原因是实际数据。这就是你感兴趣的全部,你根本不在乎它的结构,只要你得到你正在寻找或等待的信息。无论如何,除此之外的任何行为都注定会像 xhtml 一样过早死亡。
-
@BekimBacaj 我完全不同意。我希望我的标记格式正确,如果不是,我希望它告诉我,而不是默默地尝试猜测它的实际含义。这些不是标记错误的借口。但我离题了。
-
见stackoverflow.com/questions/37554623/… -
DOMParser更安全
标签: javascript html xml google-chrome dom