2011-12-16 58 views
2

我有一个使用jQuery刷新.load()的div。一旦它被刷新,新的内容出现在div中。然而,新内容中包含jQuery,并且它不起作用,即使该内容加载到自己的页面上时它仍然有效。在具有刚加载了jQuery的内容的div中实现jQuery .load()

该div也在父窗口中,但是刷新div的jQuery代码位于iframe中。代码调用top.document(父窗口)来刷新iframe外部的div。

我将展示完整的代码在这里:

这就是所谓test.php的主页。它只是一个简单的iframe,在它下面是代码告诉它在iframe中刷新的div。

<html> 
<head> 
</head> 
<body > 
<iframe src="test2.php" width="400" height="400" frameborder="3"></iframe> 
<div id="target">This text will be replaced.</div> 
</body> 
</html> 

这里是test2.php这是iframe内,所以你可以方便地按一个链接,激活下一个页面,其接通jQuery代码加载页面时,它只是开始的iframe页面。

<html> 
<head> 
</head> 
<body> 
<a href="test3.php">Click Me, if the div below reloads with the jqery content it worked!</a> 
</body> 
</html> 

这里是页test3.php与刷新的iframe外的DIV jQuery代码。 .load()起作用,但.get()不起作用。我试图用.get()和.getscript()调用jQuery,但那确实奏效。我也尝试将它们封装在.bind().on().live()中,但是如果您知道以某种方式使用这些方法的方式,那么您可以自由地将它们发布。

<html> 
<head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
<script type="text/javascript"> 

$('#target', top.document).load("test4.php"); 
$('#target', top.document).get('testb.js'); 

</script> 
</head> 
<body> 
Sent 
</body> 
</html> 

这是test4.php,它是在刷新后加载到div中的新内容。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
<p>....Polo</p> 
<script type="text/javascript" src="testb.js"></script> 

现在这里是jQuery的我试过DIV中实现,这里面是什么页面test3.php和test4.php testb.js。我打算做更复杂的代码,但由于没有jQuery工作,我决定简化它,直到jQuery不工作的原因可以被发现。

var myvariable = "Marco"; 
$("p").prepend(myvariable); 

非常感谢您给予的帮助!

回答

1

我实际上建议你不要这样做。当然,你不应该有碎片,然后加载更多的碎片。这种方式导致疯狂。

我已经能够得到它的功能,但如果我有它重写,我会做不同的。它看起来很脆弱,而且很难测试。我相信,如果主机文档具有所有逻辑,并且这些碎片不会带来任何逻辑,它就会更好。

我在加载()时遇到了问题,但我无法记起确切的细节。可能来自浏览器之间的差异?我们最终使用get()而不是load()。

由于新的Javascript没有附加到文档中,所以最大的问题是$('#target')失败。因此,在load()调用期间触发时,它不会在主机文档中找到ID。我能解决这个用的setTimeout()

<body> 
    <div id="stuff> 
     <script type="text/javascript"> 
      setTimeout(function() { 
       $('#target', top.document).get('testb.js'); 
      }, 1); 
     </script> 
     Sent 
    </div> 
</body> 

棘手位实际上可能是在路上我抓起DIV:

$.get("/foo/bar", function(html) { 
    var div = $('<div></div>'); 
    div.html(html); 
    div.find('#stuff').detach().appendTo(target); 
}); 
+1

我刚才试图与谷歌浏览器,但它没不为我工作。谢谢你试图帮助,但! – Christie 2011-12-20 23:47:58