如何使所有链接动态加载页面? (甚至动态加载页面中的链接)

时间:2010-08-17 12:11:19

标签: javascript jquery ajax dynamic

所以我有一个像这样的剧本

    <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?没有将它包含在原始标题中?

感谢。

3 个答案:

答案 0 :(得分:2)

免责声明: 要使用此解决方案,您需要升级到jQuery 1.3或jQuery 1.4 +
(但是你应该,自1.2.6以来有许多性能改进和错误修复)


而不是.click(),您可以在此使用.live(),如下所示:

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

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

答案 1 :(得分:2)

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

答案 2 :(得分: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")
});