防止将Jquery Dialog内容的CSS应用于主窗口

时间:2012-08-23 10:52:41

标签: javascript jquery css jquery-ui

在我的Web应用程序中,我编写了一个跨域的ajax调用,它从另一个域中获取HTML页面。使用以下代码$('#previewDialog').html(response).dialog('open');在jQuery对话框中呈现这个新获取的页面 这会在对话框中正确呈现响应。但是,响应(HTML页面)中也有一些CSS样式。这些样式(通常是BODY,INPUT等)将应用于我的主窗口(父页面)并扭曲页面的完整视图。

当打开HTML页面的对话框时,父页面的视图完全失真,因为HTML页面中使用的CSS(AJAX调用的响应)将应用于所有组件。当我关闭对话框时,父页面会恢复原状。

无论如何,我可以通过它来阻止在对话框中显示的HTML页面的CSS,而不是应用到我的父页面?

1 个答案:

答案 0 :(得分:0)

琐碎的答案:让你所引入的页面中的所有内容都包含在一个div中,而不包含在别处使用的类。修改该页面的.css,使其仅适用于该类div中的元素。

编辑:如果你无法控制原始页面的CSS,事情会变得有些复杂。但是,您的问题是您将HTML(包括css链接)直接注入到您的页面中。相反,请尝试以下方法:

  • 抓取另一页的HTML。使用html()命令将它放在你不使用的一侧的div中。
  • 使用jquery DOM命令进入该div。在麻烦的链接中抓取页面的一部分,然后将其拉到$('#previewDialog')位置。销毁工作空间div的内容。如果您需要保留javascript或css,请在页面的其他位置输入(修改,如果需要 - 与div包装器一样)。

现在,这仅适用于您所喂食的网页没有css或javascript随任何频率变化的情况。

同一事物的替代版本 - 当你将它作为响应(字符串格式)时,使用字符串操作工具来删除css引用,而不是使用DOM命令从中提取所需内容。

同一事物的更复杂/困难版本(虽然更强大):使用字符串命令切出css引用(与备用版本一样),然后使用该css引用再次调用以获取.css文件。使用.css文件中的字符串命令添加最初描述的div-wrapper限制,然后将其作为内部样式表插入页面的其他位置。