使用jquery load()加载内容后从页面获取所有链接;

时间:2010-05-23 13:39:14

标签: javascript jquery

使用

将内容加载到页面后
div.load('page.php');

我需要从页面获取所有链接以更改它们。所以我写了这个:

div.load('page.php', function() {
    links = $('a');
    alert(links.length);

    for(i=0 ; i<links.length ; i++
    {
        link = $('a:nth-child('+(i+1)+')');
        alert(link.attr('href'));
    }
});

此代码的结果是: - 第一个alert()返回正确的链接数量,但它不是DOM对象,所以我无法使用它更改href属性:links [i] .attr('href','changed') 我必须逐个循环获取链接,但是这个方法只返回page.php中的第一个链接和来自网站的所有链接都不会改变。

有人知道它是怎么做的吗?

2 个答案:

答案 0 :(得分:3)

你可以这样做:

div.load('page.php', function() {
    $('a').each(function(index){
      alert($(this).attr('href'));
    });
});

您可以更改自己的href

div.load('page.php', function() {
    $('a').each(function(index){
      $(this).attr('href', 'whatever');
    });
});

答案 1 :(得分:1)

如果您只需要修改已加载内容中的所有链接,请使用a context,如下所示:

div.load('page.php', function(data) {
  $('a', data).attr('href', '#');
});
//or, if they're interdependently changed, something like this...
div.load('page.php', function(data) {
  $('a', data).attr('href', function(i, href) {
    return href + "?tracking=1"; //append ?tracking=1
  });
});

这会找到所有<a>,但只会在page.php返回的响应中找到,所以只有您刚刚加载的锚点。格式为$(selector, context),如果您关闭context,则为document,因此$('a')之类的内容确实 $(document).find('a'),它是document以外的上下文,您只是说$(data).find('a'),只获取您想要的链接。