2012-07-09 4 views
9

Giả html của tôi làLấy giá trị băm mà là trước khi hashchange

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

và Js là

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

tôi muốn có được giá trị băm mà là trước khi thay đổi băm .là nó có thể? Nếu vâng, thế nào?

+0

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

+0

@undefined không chính xác –

Trả lời

10

sử dụng mà

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

Demo: http://jsbin.com/ulumil/

+1

nó được đưa ra không xác định –

+0

gì trình duyệt và os là bạn sử dụng – Amit

+2

Mozilla Firefox và os Windows 7 và bạn không nên hỏi điều này vì tôi muốn một câu trả lời tương thích trình duyệt chéo –

6

Bạn phải theo dõi băm cuối cùng, ví dụ:

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

Điều này dường như không hoạt động trong IE9 'event.fragment' cũng không được xác định. Đã phải thay thế nó bằng 'location.hash.replace (/^# /, '')' –

+0

@rparree cảm ơn, đã cải thiện câu trả lời của tôi. –

2

Trên thực tế các giải pháp được cung cấp bởi Amit hoạt động nhưng với thư viện jquery và crossplatform là tốt.

Dưới đây là một giải pháp đơn giản hơn bằng cách sử dụng javascript và crossbrowser lõi là tốt. (Kiểm tra với phiên bản mới nhất của trình duyệt IE/FF/Chrome/Safari)

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

Không hoạt động trên FF12, chưa kiểm tra các trình duyệt khác. – jldupont

+0

Như đã nêu ở trên, tính năng này hoạt động trên phiên bản mới nhất của (IE/FF/Chrome/Safari). Các mã được kiểm tra tốt, và làm việc cho tôi trên tất cả bốn trình duyệt được chỉ định. Tôi không biết nếu FF12 là phiên bản mới nhất của trình duyệt. Khi tôi thử nghiệm, phiên bản FF của tôi là FF20.0.

Bạn có thể kiểm tra giá trị của e (được thực hiện trong dòng thứ hai) và tìm ra các biến oldURL và newURL (e.oldURL và e.newURL) nếu chúng tồn tại hay không. Chúc may mắn. –

+0

Tôi có nghĩa là FF19 trên Linux. Dù sao, tôi đang sử dụng 'window.location.hash' mà dường như đáng tin cậy hơn nhiều. – jldupont

0

Không sử dụng

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

Nó sẽ không hoạt động trên IE và có lẽ ở nơi khác quá.

Sử dụng tùy chọn này thay thế.

(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 
}); 

Điều này sẽ hoạt động trong tất cả các trình duyệt hiện đại.

DEMO: https://output.jsbin.com/qafupu#one