2010-08-17 61 views
2

所以我有这样如何使所有链接动态加载页面? (在动态加载的网页甚至连)

<script type="text/javascript" 
      src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"> 
    </script> 
    <script type="text/javascript"> 
     $(document).ready(function(){ 
     $("a[href*='http://']:not([href*='"+location.hostname+"'])").attr("target","_blank"); 

     $("a[target!='_blank'][target!='_top']").click(function(){ 

     var url=$(this).attr("href")+'?jquery=1'; 
     ajaxpage(url,'actualcontent'); 

     window.location.hash=$(this).attr("href"); 
     return false; 
    }); 


}); 
    </script> 

一个脚本,它的伟大工程。这意味着我所有的链接在DIV内动态加载 - 真棒。但是,加载到这些div中的链接在点击时不会动态加载。如果我在其中包含此脚本,它仍然不起作用。在类似的说明中,有没有一种方法可以使页面中的JavaScript动态加载,这些页面可以工作?没有将其包含在原始标题中?

谢谢。

回答

2

免责声明:要使用此解决方案,您将需要升级到jQuery的1.3或1.4以上的jQuery
(但你应该也有很多性能改进和bug修复,因为1.2.6)


相反的.click(),你可以在这里使用.live(),像这样:

$("a[target!='_blank'][target!='_top']").live('click', function(){ 

.live()也适用于动态添加元素,因为它正在侦听冒泡click事件document,而不是作为元素本身的处理程序。

+0

我似乎仍然有同样的问题?这个脚本是否必须包含在新加载的页面中? – Tom 2010-08-17 12:18:04

+0

@Tom - Nope,就在主页上......但正如我所说的,你使用的是没有'.live()'的jQuery 1.2.6,你必须升级才能使用它。 – 2010-08-17 12:19:08

+2

解释live()函数的用处很有用。从文档中:“为现在或将来与当前选择器匹配的所有元素附加事件处理程序”。这与click()函数不同,因为它仅附加到所有当前超链接。 – Marc 2010-08-17 12:21:03

2

不知道你的问题是什么。你是说在这个函数之后添加的链接不使用这个函数?提示,您需要重新扫描页面以更新该div中的链接,或者您可以避免使用并使用live()

0

使用.delegate()

// Don't need to put this in a $(document).ready() callback. 
$(document).delegate("a[target!='_blank'][target!='_top']", "click", function(e){ 
    var url=$(this).attr("href")+'?jquery=1'; 
    ajaxpage(url,'actualcontent'); 
    window.location.hash=$(this).attr("href"); 
    e.preventDefault(); 
    return false; 
}); 

$(document).delegate("a[href*='http://']:not([href*='"+location.hostname+"'])", "click", function(){ 
    // lazy attr setting, reduces query cost 
    $(this).attr("target", "_blank") 
});