使用jQuery和Ajax处理锚点(哈希)链接

时间:2010-12-10 15:07:53

标签: javascript jquery ajax hyperlink

假设我想导航到以下链接:

http://www.mysite.com/feature#linktosection

http://www.mysite.com/feature的内容加载了jQuery ajax,因此在加载ajax内容之前,我无法导航到#linktosection。加载后,我需要导航(可能模拟点击)到#linktosection

这是我的jQuery ajax调用:

$('.changecontext-button').click(function()
{
    $.ajax({                                                           
        type: "POST",                                                  
        url: $(this).attr('href'),
        success: function(data) {
            diffSection.html(data);
        },
        error: function(xhr, textStatus, errorThrown) {
            diffSection.html(xhr.responseText);
        }
    });
});

你知道怎么用jQuery做这个吗?

另一种方法是解析href链接并将其分为基本网址锚网址。成功后,我可以使用jQuery选择器来获取锚链接并模拟.click()。

还有其他更好的选择,使用jQuery还是JavaScript?

先谢谢。

3 个答案:

答案 0 :(得分:3)

最后,我实现了如下:

$('.changecontext-button').click(function()
{
    var targetUrl = $(this).attr('href');
    $.ajax({                                                           
        type: "POST",                                                  
        url: targetUrl,
        success: function(data) {
            diffSection.html(data);
            var anchor = getAnchor(targetUrl);
            if (anchor)
            {
                $(anchor).click();
            }
        },
        error: function(xhr, textStatus, errorThrown) {
                diffSection.html(xhr.responseText);
        }
    });
});

...

function getAnchor(url)
{
    var index = url.lastIndexOf('#');
    if (index != -1)
        return url.substring(index);
}

答案 1 :(得分:2)

加载内容后:

$('a[name=' + window.location.hash + ']').get(0).scrollIntoView();

答案 2 :(得分:2)

这就是,在加载内容后调用时,对我有用的是:

window.location.hash = window.location.hash