2012-07-09 14 views
9

पहले था मान लीजिए मेरी एचटीएमएलहैश मान जो hashchange

<a href="#one">One</a> 
<a href="#two">Two</a> 

है जाओ और जे एस

$(window).on("hashchange"){ 
alert(document.location.hash); 
} 

है मैं हैश मान जो पहले हैश परिवर्तन यह संभव .is था प्राप्त करना चाहते हैं? यदि हा कैसे?

+0

संभव डुप्लिकेट: http://stackoverflow.com/questions/680785/on-window-location-hash-change – undefined

+0

@undefined बिल्कुल –

उत्तर

10

उपयोग कि

$(window).on("hashchange", function(e){ 
    console.log(e.originalEvent.oldURL) 
    console.log(e.originalEvent.newURL) 
})​; 

डेमो: http://jsbin.com/ulumil/

+1

यह दे रहा है अपरिभाषित –

+0

क्या ब्राउज़र और ओएस हैं आप – Amit

+2

मोज़िला फ़ायरफ़ॉक्स और ओएस विंडोज 7 का उपयोग कर रहे हैं और आपको यह नहीं पूछना चाहिए क्योंकि मैं एक क्रॉस ब्राउज़र संगत उत्तर –

6

उदाहरण के लिए आप पिछले हैश ट्रैक करने के लिए, है:

var currentHash = function() { 
    return location.hash.replace(/^#/, '') 
} 

var last_hash 
var hash = currentHash() 

$(window).bind('hashchange', function(event){ 
    last_hash = hash 
    hash = currentHash() 
    console.log('hash changed from ' + last_hash + ' to ' + hash) 
}); 
+1

यह IE9 'event.fragment' के तहत काम नहीं कर रहा है, यह भी अनिर्धारित है। इसे 'location.hash.replace (/^# /,' ')' –

+0

@rparree धन्यवाद के साथ बदलना था, मेरे उत्तर में सुधार हुआ। –

2

दरअसल अमित द्वारा प्रदान समाधान jQuery पुस्तकालय के साथ, लेकिन काम करता है और क्रॉसप्लेटफार्म भी।

कोर जावास्क्रिप्ट और क्रॉसब्रोसर का उपयोग करके यहां एक और अधिक सरल समाधान है। (आईई/एफएफ/Chrome का नवीनतम संस्करण/सफारी के साथ की जाँच)

window.onhashchange = function(e){ 
    console.log(e); 
    var oldURL = e.oldURL; 
    var newURL = e.newURL; 
    console.log("old url = " + oldURL); 
    console.log("new url = " + newURL); 
    var oldHash = oldURL.split("#")[1]; 
    var newHash = newURL.split("#")[1]; 
    console.log(oldHash); 
    console.log(newHash); 
}; 
+0

एफएफ 12 पर काम नहीं करता है, अन्य ब्राउज़रों की जांच नहीं की है। – jldupont

+0

जैसा ऊपर बताया गया है, यह नवीनतम संस्करण (आईई/एफएफ/क्रोम/सफारी) पर काम करता है। कोड अच्छी तरह से परीक्षण किए जाते हैं, और संकेत दिया गया है कि सभी चार ब्राउज़रों पर मेरे लिए काम कर रहे हैं। मुझे नहीं पता कि एफएफ 12 ब्राउज़र का नवीनतम संस्करण है या नहीं। जब मैंने परीक्षण किया, तो मेरा एफएफ संस्करण एफएफ 20.0 था।

आप ई के मूल्य (दूसरी पंक्ति में किए गए) की जांच कर सकते हैं और वे मौजूद हैं या नहीं, तो पुराने URL और newURL (e.oldURL और e.newURL) चर का पता लगा सकते हैं। शुभ लाभ। –

+0

मेरा मतलब लिनक्स पर एफएफ 1 9 था। वैसे भी, मैं 'window.location.hash' का उपयोग कर रहा हूं जो कि अधिक विश्वसनीय लगता है। – jldupont

0

$(window).on("hashchange", function(e){ 
    console.log(e.originalEvent.oldURL) 
    console.log(e.originalEvent.newURL) 
})​; 

का उपयोग न करें यह IE पर भी काम नहीं करेगा और शायद कहीं और।

इसके बजाए इसका उपयोग करें।

(function(w, $){ 
    var UrlHashMonitor = {}; 
    UrlHashMonitor.oldHash = ''; 
    UrlHashMonitor.newHash = ''; 
    UrlHashMonitor.oldHref = ''; 
    UrlHashMonitor.newHref = ''; 
    UrlHashMonitor.onHashChange = function(f){ 
    $(window).on('hashchange', function(e){ 
     UrlHashMonitor.oldHash = UrlHashMonitor.newHash; 
     UrlHashMonitor.newHash = w.location.hash; 
     UrlHashMonitor.oldHref = UrlHashMonitor.newHref; 
     UrlHashMonitor.newHref = w.location.href; 
     f(e); 
    }); 
    }; 
    UrlHashMonitor.init = function(){ 
    UrlHashMonitor.oldHash = UrlHashMonitor.newHash = w.location.hash; 
    UrlHashMonitor.oldHref = UrlHashMonitor.newHref = w.location.href; 
    }; 
    w.UrlHashMonitor = UrlHashMonitor; 
    return UrlHashMonitor; 

})(window, window.jQuery); 

/* 
* USAGE EXAMPLE 
*/ 
UrlHashMonitor.init(); 
UrlHashMonitor.onHashChange(function(){ 
    console.log('oldHash: ' + UrlHashMonitor.oldHash); 
    console.log('newHash: ' + UrlHashMonitor.newHash); 
    console.log('oldHref: ' + UrlHashMonitor.oldHref); 
    console.log('newHref: ' + UrlHashMonitor.newHref); 
    //do other stuff 
}); 

यह सभी आधुनिक ब्राउज़रों में काम करना चाहिए।

डेमो: https://output.jsbin.com/qafupu#one

संबंधित मुद्दे