使用Jquery.Load()时BODY标记消失

时间:2009-11-26 14:02:31

标签: javascript jquery html

我试图使用jquery及其模态框创建一个像窗口一样的弹出窗口。首先,我从html文件中加载内容:

$("#test").load("test.htm");

然后我加载弹出窗口:

$("#test").dialog("open");

这样就可以了,test.html的内容是注入模态弹出窗口的。只有一个认为是错误的,那就是BODY标签从弹出窗口的源头消失了。我需要BODY标签,因为我根据BODY标签进行了一些格式化。

有谁知道为什么jQuery.Load()会删除BODY标记?有没有解决方法?

5 个答案:

答案 0 :(得分:1)

一个页面只能有一个body标签。如果页面上已有一个,则忽略第二个。

在你的情况下,听起来好像浏览器忽略了重复的主体(没有特定于jquery)。不要使用正文进行样式设置,而是使用包含<div>的id {1}}来保留。

答案 1 :(得分:1)

它可能会删除body标记,因为它不被允许!每个文档只能有一个正文。而不是强迫每个人重做所有HTML页面,jQuery可能只是抓住body时要使用的load()内容。

您是否考虑过将所有内容包装在包含元素中?例如:<div class="body">然后,您可以将完全相同的样式应用于该元素。

/* change this: */
body { color: #f0f; etc }

/* to this: */
body, div.body { color: #f0f; }

答案 2 :(得分:0)

您可以使用js的document.write作为替代方法动态创建body标签。

答案 3 :(得分:0)

您正在将HTML加载到已有正文标记的现有文档中。文档只能有一个,因此它在使用加载时会自动过滤任何内容并仅提取body标记内的HTML。您应该将HTML包装在具有特定类的div中,并根据该类进行格式化。

来自load文档(强调我的):

  

在jQuery 1.2中,您现在可以指定一个   URL中的jQuery选择器。这样做   将过滤传入的HTML   文档,只注入元素   与选择器匹配。语法   看起来像“url #some&gt;   选择器“。默认选择器”body&gt; *“   始终适用。如果网址包含   空间应该是逃避()d。见   更多信息的示例。

答案 4 :(得分:0)

我遇到了同样的问题,并且或多或少解决了以下问题: 而不是使用load(),你可以使用get(),并做一些智能字符串替换:

var content = get("test.htm")
               .replace("<body>", "<body><div class='body'>")
               .replace("</body>", "</body>");
$("#test").replace($(content).filter(".body"));