Javascript - 在HTML对象上模拟document.ready()

时间:2011-09-27 10:10:51

标签: jquery document-ready

我有一个主站点A,我在子站点B上用AJAX加载内容。有一个jQuery文件可以改变站点A上的元素(向它们添加事件,类,如果需要则重新呈现它们等)正在document.ready()

上启动

现在我需要将站点B中的内容加载到站点A中。我使用函数来完成:

$.get("/some/url/",{},function(e){
    $(".some_div").html(e);
});

问题是如果我在站点B中包含jQuery,会发生以下情况:jQuery加载内容,将其放入站点A,然后触发在其中获取的所有脚本。这导致了网站的重新渲染和一大堆混乱。

我需要做的是在HTML对象 e 之后立即模拟文档.ready(),然后再将其从网站B中移出附加到站点A(所以我将重新呈现HTML代码,准备好所有事件,类和监听器。)

2 个答案:

答案 0 :(得分:0)

你不能把你的代码放在函数中,并在调用之前运行你的东西:

$(".some_div").html(e);

在该行之上,来自b的所有html已准备好但未加载或运行。或者你的意思是你想要输入HTML而不是脚本?只需使用jquery函数去除脚本标记(执行e.find('script').appendTo(new_div);)。

或者在b中添加一些代码。在b中创建一个名为init()的函数来调用所有内容。其他一切都在功能中,没有任何运行。准备就绪后,请致电init()

答案 1 :(得分:0)

经过一些研究和花在这个问题上的时间后,我找到了解决方案。

在jQuery 1.4中引入了一个方法.live()。问题是它只适用于与UI的直接用户交互(即click(),hover()方法等)。它不适用于.each()这样的方法,它不适用于第三方插件引入的方法(如.accordion(),. abs(),. datatable()等。

所以当我决定自己扩展.live()方法时,我发现了一个名为livequery的精彩库。它的文档非常好,所以你不应该弄清楚它是如何工作的。它解决了我的问题,因此案件已经结束。

(在此发布,如果有人遇到类似的问题,他会找到答案)