2013-02-20 8 views
22

का उपयोग कर URL के हैश मान में परिवर्तन का पता लगाएं मैं एक साधारण एप्लिकेशन पर काम कर रहा हूं जो एकल पृष्ठ आधारित है (परियोजना प्रतिबंधों के कारण) और गतिशील सामग्री है। मैं गतिशील सामग्री को ठीक से समझता हूं लेकिन जो मुझे समझ में नहीं आता है वह है कि एक स्क्रिप्ट को सेट अप करना है जो div के HTML को बदलता है जब URL में हैश मान बदलता है।जावास्क्रिप्ट

मैं ऐसे के रूप में काम करने के लिए JavaScript स्क्रिप्ट की जरूरत है:

यूआरएल: http://foo.com/foo.html div सामग्री: <h1>Hello World</h1>

यूआरएल: http://foo.com/foo.html#foo div सामग्री: <h1>Foo</h1>

यह कैसे काम करेंगे?

कृपया मदद करें! धन्यवाद।

+0

[सैमी] (https://github.com/quirkey/sammy) पर एक नज़र डालें। –

+0

@ ब्रैड्रिस्टी ठीक है, मैं एक नज़र डालूंगा लेकिन आदर्श रूप से मैं प्लगइन का उपयोग करने से बचना चाहता हूं ... क्या यह सिर्फ jQuery के साथ संभव है? – user115422

+0

आइए इसे यथार्थ रूप से देखें। या तो आप कुछ समय लिखने में अतिरिक्त समय बिताते हैं जो लाइब्रेरी करता है, या आप लाइब्रेरी का उपयोग करते हैं और आगे बढ़ते हैं। आप पहले से ही jQuery (एक लाइब्रेरी) का उपयोग कर रहे हैं क्योंकि आप संभवतः लचीलापन चाहते हैं और इसे स्वयं लिखना नहीं है। इसके अलावा सैमी आपको आने वाले हैश (बहुत लचीला) –

उत्तर

62

आप hashchange घटना को सुन सकते हैं:

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

ठीक है, यह एक बेवकूफ सवाल जैसा प्रतीत हो सकता है लेकिन करता है यह शरीर के अंत में या सिर में जाता है क्योंकि मैं हमेशा इस संबंध में भ्रमित हो जाता हूं? – user115422

+0

में इसे 'jquery' –

+0

@RPM के बाद सिर में शामिल किया गया है? धन्यवाद :) – user115422

5

व्यक्तिगत रूप से, मैं sammy जो आप हैशटैग टेम्पलेट (प्लेसहोल्डर जोड़ सकते हैं और उन्हें वापस पढ़ने में सक्षम हो) के लिए लचीलापन प्रदान करता है का उपयोग करेंगे। जैसे

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

एक उदाहरण यहां पाया जा सकता: http://jsfiddle.net/KZknm/1/

+0

मैं कोशिश की है:। ' 'लेकिन स्क्रिप्ट नहीं करता है कुछ भी सचेत जब मैं हैशटैग बदल .. – user115422

+0

@ फर्मोनॉयड: यह डो इस तरह से काम मत करो। आपको 'this.get (...); ' –

+0

@fermionoid के साथ परिवर्तनों से जुड़ना होगा: उदाहरण को देखें जो मैंने अपने अपडेट किए गए उत्तर में शामिल किया है। –