2013-02-20 12 views
22

Sto lavorando a una semplice applicazione basata su una singola pagina (a causa di limitazioni del progetto) e con contenuti dinamici. Comprendo i contenuti dinamici, ma quello che non capisco è come impostare uno script che modifichi l'html di uno div quando cambia il valore dell'hash nell'URL.Rileva cambiamento nel valore hash dell'URL utilizzando JavaScript

ho bisogno di uno script JavaScript per funzionare come tale:

Url: http://foo.com/foo.html div contenuti: <h1>Hello World</h1>

Url: http://foo.com/foo.html#foo div contenuti: <h1>Foo</h1>

Come questo lavoro?

Si prega di aiuto! Grazie.

+0

Dai un'occhiata alla [Sammy] (https://github.com/quirkey/sammy). –

+0

@Bradchristie ok, darò un'occhiata ma idealmente voglio evitare di usare molti plugin ... è possibile solo con jQuery? – user115422

+0

Vediamolo realisticamente. O passi il tempo addizionale scrivendo qualcosa che fa ciò che fa una libreria, o semplicemente usi la libreria e vai avanti. Stai già utilizzando jQuery (una libreria) perché presumibilmente vuoi la flessibilità e non devi scriverlo da solo. Plus sammy ti permette di inserire segnaposto e template l'hash in arrivo (molto flessibile) –

risposta

62

È possibile ascoltare l'evento hashchange:

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

ok, questa può sembrare una domanda stupida ma fa questo va alla fine del corpo o nella testa perché mi confondo sempre a questo proposito? – user115422

+0

includilo dopo 'jquery' –

+0

@RPM così in testa? Grazie :) – user115422

5

personalmente, mi piacerebbe utilizzare sammy che ti dà la flessibilità al modello l'hashtag (aggiungere segnaposto ed essere in grado di leggere di nuovo). per esempio.

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

Un esempio può essere trovato qui: http://jsfiddle.net/KZknm/1/

+0

ho provato:. ' 'ma lo script doesnt avvisare nulla quando cambio la hashtag .. – user115422

+0

@fermionoid: Sì non lavorare in questo modo È necessario associare alle modifiche con 'this.get (...);' –

+0

@fermionoid: vedere l'esempio che ho incluso nella mia risposta aggiornata. –

Problemi correlati