【发布时间】:2012-03-21 08:45:20
【问题描述】:
我们在一个项目中有一个特殊要求,我们必须在客户端仅通过 JavaScript 解析一串 HTML(来自 AJAX 响应)。没错没有在 PHP 或 Java 中进行解析!我整个星期都在使用 StackOverflow,但还没有一个可以接受的解决方案。
有关要求的更多详细信息:
我们可以使用任何库(最好是 dojo 和/或 jQuery)或使用原生库!
我们需要解析一个作为字符串接收的整个 HTML 文档,包括
<head>和<body>。我们有时还需要将已解析的 DOM 结构序列化为字符串。
-
最后,我们不希望将解析后的 DOM 附加到当前 Document。 相反,我们会将其发送回服务器进行永久存储。
例如:我们需要类似的东西
var dom = HTMLtoDOM('<html><head><title> This is the old title. </title></head></html>');
dom.getElementsByTagName('title')[0].innerHTML = "This is a new Title";
根据我的研究,以下是我们的选择:
TinyMCE Parser。问题?我认为我们必须包括一名编辑。在我们不需要编辑器的情况下解析 HTML 怎么样?
John Resig's Parser。应该是我们最好的选择。不幸的是,当将页面的全部内容提供给解析器时,解析器就会崩溃!
jQuery $(htmlString) 或 dojo.toDom(htmlString)。两者都依赖 DocumentFragment,因此吞噬了
<head>和<body>!
编辑:我们想要序列化 HTML,以便我们可以通过 RegExp 捕获某些自定义 HTML Commnet。我们需要让用户有机会编辑元标记、标题标记等,因此需要 HTML 解析器。
哦,我觉得我会在 Stack Overflow 中被谋杀,即使我只是提示通过 RegExp 解析 HTML !!!
【问题讨论】:
-
创建一个 IFRAME 节点并将其塞入其中?
-
但是.. 我不明白你为什么要在将已经序列化的 HTML 字符串发送到服务器之前“解析”它。无论如何,您都必须将其重新序列化回字符串以将其传递回服务器,对吗?
-
@JensRoland 我们想从 RegExp 中捕获某些自定义 HTML cmets,从而进行序列化。我们希望让用户能够编辑标题标签、元标签等,从而进行 DOM 解析!
-
@DreamFactory:给他们
<input>的!不要给用户做 XSS 或其他危险事情的机会。他们不需要编辑文档!并且您应该永远显示并非来自可信来源的 HTML。永远不要相信客户!很危险! -
可以管理所有提到的问题,而无需一次解析整个 DOM
标签: javascript jquery parsing dojo html-parsing