Обрабатывать якорные (хэш) ссылки с помощью jQuery и Ajax - PullRequest
2 голосов
/ 10 декабря 2010

Предположим, я хочу перейти по следующей ссылке:

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

Содержимое http://www.mysite.com/feature загружено с помощью jQuery ajax, поэтому я не могу перейти к #linktosection до тех пор, пока содержимое ajax не будет загружено.После загрузки мне нужно перейти (возможно, смоделировать щелчок) к #linktosection

Это мой ajax-вызов jQuery:

$('.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 и разделение ее на базовый URL и ссылочный URL .В случае успеха я мог бы использовать селектор jQuery для получения ссылки привязки и имитации .click ().

Есть ли какая-либо другая лучшая альтернатива, использующая jQuery или JavaScript?

Спасибо заранее.

Ответы [ 3 ]

3 голосов
/ 10 декабря 2010

Наконец, я реализовал это следующим образом:

$('.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);
}
2 голосов
/ 09 апреля 2013

Это то, что у меня работает, когда вызывается после загрузки контента:

window.location.hash = window.location.hash
2 голосов
/ 10 декабря 2010

После загрузки вашего контента:

$('a[name=' + window.location.hash + ']').get(0).scrollIntoView();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...