如何使用jQuery选择加载的Ajax内容中的所有链接?

时间:2009-08-28 07:03:59

标签: jquery

我通过Ajax加载内容,然后我会有像$('。my_content_class')这样的元素,我就像这样加载数据$('。my_content_class')。load(url); ,但是如何匹配我加载到.my_content_class的新内容中的所有元素?我试过了,但根本没用。

$('.my_content_class a').each(function() 
{
     doSomething($(this));
});

4 个答案:

答案 0 :(得分:3)

$('.my_content_class a')是这样做的方法。您可能遇到的是在加载内容之前运行该函数。 AJAX是异步工作的,因此在继续下一行代码之前,脚本不会在内容加载之前结束。您应该将代码放在load方法回调中,以便在AJAX请求完成其工作后执行。

var url = 'http://example.com/test.html';
var data = {var1: foo, var2: bar};
$('.my_content_class').load(url, data, function () {
     // this will be executed after the content was successfully loaded
});

从文档中我可以阅读的内容,一旦AJAX完成其工作,就会调用回调,而我不确定这是否是在将实际内容加载到DOM树之后。您需要自己解决这个问题,如果在此之前完成,则必须在回调函数中创建一些小延迟,以便在更新DOM后启动。 setTimeout可能会派上用场,但首先我要确保你需要那部分。

答案 1 :(得分:3)

您可以使用load函数的回调参数来确切知道加载完成的时间,然后您可以选择元素:

$('.my_content_class').load(url, function () {
  var anchors = $('a', this); // all loaded anchor elements 
});

答案 2 :(得分:1)

如果需要,您可以直接从您的ajax内容中执行此操作,而无需将其加载到另一个容器中

$('a', content_returned_from_ajax).each( function() { 
   //dostuff 
});

答案 3 :(得分:0)

你必须使用jQuery的live()函数。它是在jQuery 1.3中添加的。