2009-08-20 2 views
5

У меня есть набор ссылок с #anchors, указывающий на одну веб-страницу, и я хотел бы плавно перейти к модели с отдельной веб-страницей для каждой из этих ссылок. Я хочу, чтобы старые ссылки продолжали работать с использованием перенаправления.Javascript для перенаправления с #anchor на отдельную страницу

Старый ссылка стиль:

/all_products#A 
/all_products#B 
/all_products#C 

Новый стиль ссылка:

/products/A 
/products/B 
/products/C 

Я знаю, что сервер не получает имя #anchor в запросе, но Javascript может.

Можно ли автоматически переадресовывать из/all_products # A в/products/A с помощью Javascript?

JQuery будет хорошо, он используется на сайте в любом случае.

ответ

1

Я надеюсь, это может помочь :)

var urlSplit = document.URL.split("#"); 
if (urlSplit[1]) { 
    location.href = "http://www.example.org" + "/" + urlSplit[1]; 
} 
else { 
    location.href = "http://www.example.org"; 
} 
+0

Обратите внимание: существует проблема с использованием этого на странице «по умолчанию» в каталоге для ie8: она теряет значение хэш-функции. – Gregory

+0

Вы должны предпочесть [этот метод для извлечения хэша] (http://stackoverflow.com/a/10076097/151365) и [этот метод для перенаправления] (http://stackoverflow.com/a/506004/151365) на избегайте проблем, указанных в связанных статьях.Я добавил [обновленный ответ, включая эти лучшие рекомендации ниже] (http://stackoverflow.com/a/21198129/151365). – logan

0

это может помочь:

<a href="/all_products#A" onclick="return redirectMe(this);">A</a> 
<a href="/all_products#B" onclick="return redirectMe(this);">B</a> 
<a href="/all_products#C" onclick="return redirectMe(this);">C</a> 
<a href="/all_products#D" onclick="return redirectMe(this);">D</a> 
<a href="/all_products#E" onclick="return redirectMe(this);">E</a> 

<script type="text/javascript"> 
function redirectMe(a){ 
    var aa=a+""; 
    window.location=aa.replace(/#/g,"/"); 
} 
</script> 
+0

оглашение и без комментариев? – TheVillageIdiot

+0

Downvote был не от меня, но это не то, что мне нужно. Как ответ kkyy, это будет работать только для ссылок на моем собственном веб-сайте, которые я могу в любой момент изменить на новую схему. Мне нужно перенаправить ссылки, сохраненные на других веб-сайтах, над которыми я не контролирую. –

1

С JQuery, либо просто заменить HREF с правильным одного:

$('a').each(function() { 
    this.href = this.href.replace(/all_products#/, 'products/'); 
}); 

или захвата кликов и перенаправления:

$('a').click(function() { 
    window.location = this.href.replace(/all_products#/, 'products/'); 
    return false; 
}); 
+1

Но это будет работать только для ссылок на моем сайте. Не для существующих ссылок с других сайтов. Правильно? –

2

Put это как можно ближе к верхней части HTML <head>, как вы можете так, что она может выполнять до остальной части страницы загрузки ресурсов:

<script> 
function checkURL() { 
    var old_path = '/all_products'; 
    if (window.location.pathname != old_path) { 
     // Not on an old-style URL 
     return false; 
    } 
    // Some browsers include the hash character in the anchor, strip it out 
    var product = window.location.hash.replace(/^#(.*)/, '$1'); 
    // Redirect to the new-style URL 
    var new_path = '/products'; 
    window.location = new_path + '/' + product; 
} 
checkURL(); 
</script> 

Это будет проверять текущий URL страницы и перенаправления если он соответствует пути старого стиля.

Этот код использует объект window.location, который содержит все части текущего URL, уже разделенные на составные части.

Выполнение этого сценария более общий, как упражнение для исполнителя.

8

Я добавил этот новый ответ, чтобы включить некоторые рекомендации для обоих extracting the hash from the url и doing a redirect.

// Closure-wrapped for security. 
(function() { 
    var anchorMap = { 
      "A": "/products/A" 
      "B": "/products/B" 
      "C": "/products/C" 
    } 
    /* 
    * Best practice for extracting hashes: 
    * https://stackoverflow.com/a/10076097/151365 
    */ 
    var hash = window.location.hash.substring(1); 
    if (hash) { 
     /* 
     * Best practice for javascript redirects: 
     * https://stackoverflow.com/a/506004/151365 
     */ 
     window.location.replace(anchorMap[hash]); 
    } 
})(); 
Смежные вопросы