2011-02-02 33 views
8

Xin chào, tôi hy vọng ai đó có thể trợ giúp. tôi muốn che giấu nhận dạng đoạn từ thanh địa chỉ nên thay vì:xóa số nhận dạng phân đoạn khỏi thanh địa chỉ

www.mydomain.com/example.html#something

tôi chỉ nhận được:

www.mydomain.com /example.html

khi tôi nhấp vào thẻ neo.

Tôi đã xem rất nhiều câu hỏi và diễn đàn có liên quan nhưng vẫn không thể tìm ra được. Tôi chắc rằng tôi nên sử dụng thứ gì đó dọc theo các dòng:

window.location.href.replace(/#.*/,''); //and or .hash 

không thể chỉ ra được.

localScroll plugin cho phép bạn ẩn hoặc giữ số nhận dạng và theo mặc định chúng bị ẩn. tôi nghĩ rằng nhiều plugin gallery cũng có một tùy chọn tương tự.

nhưng khi tôi cố gắng và làm điều đó bản thân mình (bit của một người mới) tôi nhận được điên để không có kết quả.

dưới đây là một số ví dụ kịch bản cơ bản tôi muốn nó để làm việc với:

<style> 
.wrap{ 
width:300px; 
height:200px; 
margin:auto; 
} 

.box{ 
width:300px; 
height:200px; 
position:absolute; 
display:none; 
} 

#one{background:red;} 
#two{background:blue;} 
#three{background:green;} 

.load{display:block;} 
</style> 


<body> 
<ul> 
    <li><a href="#one">One</a></li> 
    <li><a href="#two">Two</a></li> 
    <li><a href="#three">Three</a></li> 
</ul> 

<div class="wrap"> 
    <div id="one" class="box load">This is Box 1</div> 
    <div id="two" class="box">This is Box 2</div> 
    <div id="three" class="box">This is Box 3</div> 
</div> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script> 
$(document).ready(function() { 

$("ul li a").click(function(){ 

     $("div.box").fadeOut(1000); 

     $($(this).attr('href')).fadeIn(1000); 

    }); 
}); 
</script> 
</body> 
+0

Tôi không quá rõ ràng về những gì bạn đang cố gắng làm, thành thật mà nói. Mã của bạn dường như hoạt động tốt. – Kobi

+0

trùng lặp http://stackoverflow.com/questions/680785/on-window-location-hash-change –

Trả lời

19

Thêm

return false; 

ở cuối chức năng nhấp chuột của bạn, chức năng này sẽ dừng việc sao chép sự kiện này

+1

+1 - Tôi đã đăng một câu trả lời dài về các công cụ thẻ băm, nhưng giờ tôi đã thực sự đọc mã của anh ta, tôi thấy rằng giải pháp của bạn sẽ cho anh ta hành vi anh ta muốn. :-) –

+0

cảm ơn bạn rất nhiều, rất khó chịu vì điều đó thật đơn giản. tôi nghĩ rằng nhìn vào các câu hỏi của người khác và google khiến tôi bối rối và bị bỏ rơi – thom

+0

cảm ơn vì câu trả lời này.đã lưu lại ngày của tôi. – Montiyago

-1

thử này .... nó sẽ loại bỏ # trên toàn cầu trong url của bạn

window.location.href.replace(/\#*/g, "") 

đây là DEMO

+4

'example.html # something' ->' example.htmlsomething'? Có lẽ không phải là một ý tưởng tốt ':)' – Kobi

+0

không có nó không giống như tôi đã viết cùng một điều trong tập tin địa phương vì vậy tôi chỉ cần sao chép dán đó và đã sai lầm này :) – Vivek

+1

Hàm thay thế trả về một chuỗi * mới * với sự thay thế. Bạn cần phải chỉ định kết quả ở đâu đó. –

3

Chức năng replace trả về một chuỗi mới, nó không hoạt động trên chuỗi cũ. Bạn cần sử dụng: window.location.href = window.location.href.replace(/#.*/,'').

Tuy nhiên, điều này sẽ không có hiệu ứng mong đợi, vì thay đổi window.location.href theo bất kỳ cách nào không chỉ là thêm hoặc thay đổi thẻ băm làm cho trang tải lại.

Plugin localScroll hoạt động bằng cách tìm kiếm thẻ bắt đầu bằng # và sử dụng plugin jQuery scrollTo để cuộn đến vị trí và ngăn hành vi mặc định của trình duyệt khi bạn nhấp vào liên kết có thẻ băm. Họ đã không thực sự thay đổi URL để loại bỏ băm, họ đã ngăn chặn nó từ bao giờ xuất hiện.

Điều tốt nhất bạn có thể làm gì nếu bạn muốn loại bỏ các hash từ URI là để giữ chỉ là # ở cuối:

window.location.href = window.location.href.replace(/#.*/,'#'); 

Mặc dù trong một số trình duyệt cũ, ngay cả điều này sẽ kích hoạt một tải lại trang (chỉ có các trình duyệt rất cũ).

+0

mặc dù trả về false; là những gì cần thiết, cảm ơn bạn đã trả lời. của nó đã giúp giải thích những gì localScroll đã làm và tại sao những gì tôi đã cố gắng không hoạt động. – thom

Các vấn đề liên quan