2009-08-20 17 views
5

Tôi có một tập hợp các liên kết với #anchors trỏ đến một trang web và tôi muốn di chuyển suôn sẻ đến một mô hình với một trang web riêng biệt cho từng liên kết đó. Tôi muốn các liên kết cũ tiếp tục hoạt động bằng cách sử dụng chuyển hướng.Javascript để chuyển hướng từ #anchor đến một trang riêng lẻ

Cũ link phong cách:

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

mới phong cách liên kết:

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

Tôi biết rằng các máy chủ không nhận tên #anchor trong yêu cầu nhưng Javascript sức.

Có thể tự động chuyển hướng từ/all_products # A đến/products/A bằng Javascript không?

JQuery vẫn ổn, nó vẫn được sử dụng trên trang web.

Trả lời

1

Tôi hy vọng điều này có thể giúp :)

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

Xin lưu ý: Có vấn đề với việc sử dụng điều này trong trang "mặc định" trong một thư mục cho ie8: Nó mất giá trị băm. – Gregory

+0

Bạn nên chọn [phương pháp này để trích xuất băm] (http://stackoverflow.com/a/10076097/151365) và [phương pháp này để chuyển hướng] (http://stackoverflow.com/a/506004/151365) đến tránh các vấn đề được nêu trong các bài viết được liên kết.Tôi đã thêm [câu trả lời được cập nhật bao gồm các phương pháp hay nhất này bên dưới] (http://stackoverflow.com/a/21198129/151365). – logan

0

này có thể giúp:

<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

xuống phiếu bầu và không có nhận xét? – TheVillageIdiot

+0

Downvote không phải từ tôi nhưng đây không phải là những gì tôi cần. Là câu trả lời của kkyy, điều này sẽ chỉ hoạt động cho các liên kết trên trang web của riêng tôi, mà tôi có thể thay đổi sang lược đồ mới bất cứ lúc nào tôi muốn. Tôi cần phải chuyển hướng các liên kết được lưu trên các trang web KHÁC mà tôi không có quyền kiểm soát. –

1

Với jquery, hoặc chỉ cần thay thế href với đúng một:

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

hoặc chụp nhấp chuột và chuyển hướng:

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

Nhưng điều này sẽ chỉ hoạt động đối với các liên kết trên trang web của tôi. Không dành cho các liên kết hiện có từ các trang web khác. Đúng? –

2

Đặt này càng gần phía trên cùng của HTML của bạn <head> như bạn có thể để nó có thể thực hiện trước khi phần còn lại của tải tài nguyên trang:

<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> 

này sẽ kiểm tra URL trang hiện tại và chuyển hướng nếu nó khớp với đường dẫn kiểu cũ.

Mã này sử dụng đối tượng window.location chứa tất cả các phần của URL hiện tại đã được chia thành các phần thành phần.

Làm cho tập lệnh này trở nên tổng quát hơn như một bài tập cho người thực hiện.

8

Tôi đã thêm câu trả lời mới này để bao gồm một số phương pháp hay nhất cho cả hai extracting the hash from the urldoing 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]); 
    } 
})(); 
Các vấn đề liên quan