如何正确合并2个HTML文档及其样式?

如何正确合并2个HTML文档及其样式?,html,Html,我是一个电子邮件客户端的作者,我正在做的事情之一就是添加对HTML编辑的支持。编辑器本身以我从头开始编写的HTML呈现控件为基础,但是它相当好地支持大多数HTML和CSS。我遇到的问题是使用用户的回复模板格式化对HTML电子邮件的回复,该模板也是HTML(具有不同的样式表)。因此,可以清晰地将两个HTML文档合并为各自的样式,而不会被另一个文档的样式弄乱 当用户回复HTML电子邮件时,我解析出标签的内容,并将其放入一个构成回复一部分的文件中。该div的样式在左边空白处显示一行,通知用户它引用的是

我是一个电子邮件客户端的作者,我正在做的事情之一就是添加对HTML编辑的支持。编辑器本身以我从头开始编写的HTML呈现控件为基础,但是它相当好地支持大多数HTML和CSS。我遇到的问题是使用用户的回复模板格式化对HTML电子邮件的回复,该模板也是HTML(具有不同的样式表)。因此,可以清晰地将两个HTML文档合并为各自的样式,而不会被另一个文档的样式弄乱

当用户回复HTML电子邮件时,我解析出标签的内容,并将其放入一个构成回复一部分的文件中。该div的样式在左边空白处显示一行,通知用户它引用的是原始电子邮件。Gmail也做同样的事情。无论如何,HTML块中的样式将单独保存,然后插入到新文档的头部分

当然,如果原始电子邮件为某个链接定义了样式,那么该样式会影响原始引用区域之外的所有链接。因此,底部的签名和作为回复模板一部分的From/To header呈现都是从源HTML获得样式


我想知道是否有一个简单直接的解决方案,将所有原始样式仅包含在文档的引用部分?比如名称空间?还是有限范围的样式?

我找到的解决方案是将来自多个文档的所有传入样式添加到全局样式表中。通过首先检查属性的计数是否相同,然后枚举每个属性并比较其值来匹配样式。这基本上为软件提供了正确呈现内容所需的最少样式数。在病理病例中可能会非常缓慢,但到目前为止,它在实践中效果良好


顺便说一句,最近我注意到很多电子邮件客户端将所有回复的风格都去掉了。老实说,这似乎是解决这个问题的廉价而肮脏的办法。即使它确实提供了一致的外观。

唯一会想到的是范围样式,但浏览器对此的支持相当差,除此之外,您可能必须通过向每个样式表添加一个祖先元素来修改样式表规则,我已经在分析CSS并将任何主体样式转换为div.scribe_reply(引用div),这是一个相当合理的扩展。控件确实支持子体CSS操作符。。。嗯