2009-11-26 143 views
2

我试图使用jquery及其模式框来弹出窗口。首先,我加载从一个HTML文件中的内容:当使用jquery.Load()时,BODY标记消失()

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

然后我加载弹出:

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

这就像它应该,test.html中的内容是injectet入模式弹出。只有一种观点认为是错误的,那就是BODY标签已经从弹出的源头中消失了。我需要BODY标签,因为我根据BODY标签进行了一些格式设置。

有谁知道为什么jQuery.Load()删除BODY标签?是否有任何解决方法?

+0

“我做一些基于BODY标签的格式化”。为什么不使用包装div和格式呢?试图将标签插入现有的元素,这肯定是无效的HTML,这让您很头疼。 – Duroth 2009-11-26 14:05:57

+0

我想这样做,但我从外部的XML源获取文件,我没有控制标记。 – Martin 2009-11-26 14:10:45

回答

0

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

load文档(重点矿山):

在jQuery 1.2中,你现在可以在URL中指定一个 jQuery选择。这样做 将过滤传入的HTML 文档,只注入匹配选择器的元素 。语法 看起来像“URL #some> 选择”。 默认选择器“body> *” 始终适用。如果URL包含 空间,它应该是escape()d。有关更多信息,请参阅 示例。

0

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

+0

这将在稍后动态,这意味着我将从XML文件中获取HTML代码,并使用ASP.NET处理程序(ashx-file)将其加载到DIV中。 所以我真的不能真正添加​​使用javascript的身体标记,因为我不知道在哪些行添加它,因为文件即将加载可能会改变。 – Martin 2009-11-26 14:08:24

1

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

在你的情况下,它听起来像浏览器忽略了重复的主体(没有特定于jquery)。使用包含<div>的id或类将保留,而不是使用身体进行造型。

+0

听起来很合理,我想那可悲的是答案。 – Martin 2009-11-26 14:09:28

1

它可能会删除body标记,因为它是不允许的!每个文件只能有一个主体。与其强迫所有人重做所有HTML页面,jQuery可能只是在调用load()时抓取body的内容。

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

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

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

+1,完美的例子,并且要求所有可能的解决方案中最少的工作。 – Duroth 2009-11-26 14:08:22

+0

这是一个很好的答案。也许它会通过使用对话框的类(从内存,它的ui对话框)得到改进,尽管这取决于他是否因任何其他原因使用对话框。我感觉他不是。 – Gausie 2009-11-26 16:54:41

0

我有同样的问题,并解决它或多或少如下: 而不是使用load()方法,你可以使用get(),并做一些聪明的字符串替换:

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