2013-02-20 36 views
22

Tôi đang làm việc trên một ứng dụng đơn giản dựa trên một trang (do hạn chế dự án) và có nội dung động. Tôi hiểu nội dung động không sao nhưng những gì tôi không hiểu là cách thiết lập tập lệnh thay đổi html của div khi giá trị băm trong URL thay đổi.Phát hiện thay đổi về giá trị băm của URL bằng cách sử dụng JavaScript

Tôi cần một kịch bản JavaScript để làm việc như vậy:

Url: http://foo.com/foo.html div nội dung: <h1>Hello World</h1>

Url: http://foo.com/foo.html#foo div nội dung: <h1>Foo</h1>

Làm thế nào sẽ làm việc này?

Vui lòng trợ giúp! Cảm ơn.

+0

Có một cái nhìn tại [Sammy] (https://github.com/quirkey/sammy). –

+0

@Bradchristie ok, tôi sẽ xem xét nhưng lý tưởng là tôi muốn tránh sử dụng các plugin nhiều ... có thể chỉ với jQuery không? – user115422

+0

Hãy nhìn vào thực tế. Hoặc bạn dành thêm thời gian để viết một cái gì đó làm những gì một thư viện làm, hoặc bạn chỉ sử dụng thư viện và tiếp tục. Bạn đã sử dụng jQuery (một thư viện) bởi vì bạn có lẽ muốn sự linh hoạt và không phải tự viết nó. Thêm sammy cho phép bạn chèn placeholders và mẫu hash đến (rất linh hoạt) –

Trả lời

62

Bạn có thể nghe các sự kiện hashchange:

$(window).on('hashchange',function(){ 
    $('h1').text(location.hash.slice(1)); 
}); 
+0

ok, điều này có vẻ như một câu hỏi ngu ngốc nhưng không điều này đi vào cuối của cơ thể hoặc trong đầu bởi vì tôi luôn luôn bị nhầm lẫn về vấn đề này? – user115422

+0

bao gồm nó sau khi 'jquery' –

+0

@ RPM vì vậy trong đầu? Cảm ơn :) – user115422

5

cá nhân, tôi muốn sử dụng sammy mang đến cho bạn sự linh hoạt để template hashtag (thêm placeholders và có thể đọc chúng trở lại). ví dụ.

<script src="/path/to/jquery.js"></script> 
<script src="/path/to/sammy.js"></script> 
<script> 
    $(function(){ 
     // Use sammy to detect hash changes 
     $.sammy(function(){ 
      // bind to #:page where :page can be some value 
      // we're expecting and can be retrieved with this.params 
      this.get('#:page',function(){ 
       // load some page using ajax in to an simple container 
       $('#container').load('/partial/'+this.params['page']+'.html'); 
      }); 
     }).run(); 
    }); 
</script> 

<a href="#foo">Load foo.html</a> 
<a href="#bar">Load bar.html</a> 

Một ví dụ có thể được tìm thấy ở đây: http://jsfiddle.net/KZknm/1/

+0

tôi đã cố gắng:. ' 'nhưng kịch bản doesnt cảnh báo bất cứ điều gì khi tôi thay đổi hashtag .. – user115422

+0

@fermionoid: Nó doe không làm việc theo cách đó. Bạn cần phải liên kết với các thay đổi với 'this.get (...); ' –

+0

@fermionoid: xem ví dụ tôi đã đưa vào câu trả lời cập nhật của mình. –

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